用C#编写的小程序,向数据库写数据时出现的错误

wenshibo99 2005-07-18 04:28:47
软件开发环境是vs.net2003,数据库用的是sql2000
用C#编写了一个个人通讯录,读数据库里面的数据正常,但是写数据的时候或者更新数据的时候就出现问题了,错误提示如下:
未处理的“System.Data.SqlClient.SqlException”类型的异常出现在 system.data.dll 中。

其他信息: 系统错误

请高手指点一下,谢谢!
...全文
174 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
wenshibo99 2005-07-20
  • 打赏
  • 举报
回复
谢谢各位大侠了,上面的问题解决了,确实是少了一个单引号,以后小弟会注意的
另一个模块也出现了这样的问题,说“未处理的“System.Data.SqlClient.SqlException”类型的异常出现在 system.data.dll 中。”
代码如下:
private void buttonSaveChange_Click(object sender, System.EventArgs e)
{
DialogResult result;
//弹出确认信息
result=MessageBox.Show(this,"确认要修改用户信息吗?","提示",MessageBoxButtons.YesNo,MessageBoxIcon.Question,MessageBoxDefaultButton.Button1,MessageBoxOptions.RightAlign);
if(result==DialogResult.Yes)
{
//检查姓名字段是否为空
if(textBoxName.Text.Trim()=="")
{
MessageBox.Show("姓名不能为空,请重新输入!","错误");
return;
}

DataTable dt=myDataSet.Tables["Records"];

//检查该记录的姓名是否可用
bool bExist=false;
foreach(DataRow drw in dt.Rows)
{
if(drw["姓名"]!=treeViewMain.SelectedNode.Text.Trim()&&drw["姓名"]==textBoxName.Text.Trim())
{
bExist=true;
}
}

if(bExist)
{
MessageBox.Show("该记录的姓名已被其他记录使用,请重新选择!","错误");
return;
}

//修改对应记录信息
DataColumn[] dc=new DataColumn[1];
dc[0]=dt.Columns["姓名"];
dt.PrimaryKey=dc;
object key=treeViewMain.SelectedNode.Text.Trim();
//查找对应的记录
DataRow dr=dt.Rows.Find(key);

dr["姓名"]=textBoxName.Text.Trim();
dr["性别"]=comboBoxSex.SelectedText;

//DateTime数据类型的处理
if(textBoxYear.Text.Trim()!="")
{
//对年份进行语法检查
try
{
//把字符串内容变成数字
Convert.ToInt16(textBoxYear.Text.Trim());
}
catch(FormatException ee)
{
MessageBox.Show("年份输入不正确,请重新输入!","错误");
return;
}

int year,month,day;
//设定年月日的值
year=Convert.ToInt16(textBoxYear.Text);
month=comboBoxMonth.SelectedIndex+1;
day=comboBoxDay.SelectedIndex+1;
DateTime datetime=new DateTime(year,month,day);
dr["出生日期"]=datetime;
}

//设定其他内容
if(textBoxBelong.Text.Trim()!="")
{
dr["生肖"]=textBoxBelong.Text.Trim();
}
if(textBoxConstellation.Text.Trim()!="")
{
dr["星座"]=textBoxConstellation.Text.Trim();
}
if(textBoxAddress.Text.Trim()!="")
{
dr["家庭地址"]=textBoxAddress.Text.Trim();
}
if(textBoxPhone.Text.Trim()!="")
{
dr["电话"]=textBoxPhone.Text.Trim();
}
if(textBoxMobile.Text.Trim()!="")
{
dr["手机"]=textBoxMobile.Text.Trim();
}
if(textBoxOicq.Text.Trim()!="")
{
dr["Oicq"]=textBoxOicq.Text.Trim();
}
if(textBoxEmail.Text.Trim()!="")
{
dr["Email"]=textBoxEmail.Text.Trim();
}

//文件类型数据的处理
if(pictureBoxLook.Image!=null)
{
//新建一个内存流
MemoryStream ms=new MemoryStream();
//把图片内容存到内存流中去
pictureBoxLook.Image.Save(ms,System.Drawing.Imaging.ImageFormat.Bmp);
//把内存流中的内容按字节读入字节数组中
byte[] myData=new byte[ms.Length];
ms.Position=0;
ms.Read(myData,0,Convert.ToInt32(ms.Length));
dr["图片"]=myData;
ms.Close();
}

//treeView的同步更新
treeViewMain.SelectedNode.Text=textBoxName.Text;

//更新数据库信息,保持DataSet与数据库的一致
myDataAdapter.Update(myDataSet,"Records");
}
}
wenshibo99 2005-07-19
  • 打赏
  • 举报
回复
代码如下,在最后的myCommand.ExecuteNonQuery();出错

using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;
using System.Data.SqlClient;
namespace 个人通讯录
{
/// <summary>
/// Form1 的摘要说明。
/// </summary>
public class LogForm : System.Windows.Forms.Form
{
private System.Windows.Forms.Label labelUser;
private System.Windows.Forms.Label labelPW;
private System.Windows.Forms.TextBox textBoxUser;
private System.Windows.Forms.TextBox textBoxPW;
private System.Windows.Forms.Button buttonNewUser;
private System.Windows.Forms.Button buttonLogOn;
private System.Windows.Forms.Button buttonExit;
private SqlConnection myConnection;
private MainForm mainForm;

//(2)
//重载LogForm的构造函数,把主窗口的指针作为参数传入
/// <summary>
/// 必需的设计器变量。
/// </summary>
private System.ComponentModel.Container components = null;

public LogForm(MainForm pForm)
{
//
// Windows 窗体设计器支持所必需的
//
InitializeComponent();

//设置连接字符串
string myConnectionString;
myConnectionString="Initial Catalog=addresslist;"+"Data Source=localhost;user id=sa;password=;Connect Timeout=30";
//新建一个连接对象
myConnection=new SqlConnection(myConnectionString);

try
{
//建立连接
myConnection.Open();
}
catch(SqlException e)
{
//弹出对话框提示登录失败
MessageBox.Show("出错,不能连接服务器!");

//改变LogForm的text表示登录失败
this.Text="登录数据库失败,请退出检查与数据库的连接";

//禁止新建用户和登录功能
buttonNewUser.Enabled=false;
buttonLogOn.Enabled=false;
}
// TODO: 在 InitializeComponent 调用后添加任何构造函数代码
//

mainForm=pForm;
//根据myConnection的状态返回信息
if(mainForm.myConnection.State==System.Data.ConnectionState.Closed)
{
//弹出对话框表示登录失败
MessageBox.Show("出错,不能连接服务器!");

//改变LogForm的text表示登录失败
this.Text="登录数据库失败,请退出检查与数据库的连接";
//禁止新建用户和登录功能
buttonNewUser.Enabled=false;
buttonLogOn.Enabled=false;
}
}

/// <summary>
/// 清理所有正在使用的资源。
/// </summary>
protected override void Dispose( bool disposing )
{
if( disposing )
{
if (components != null)
{
components.Dispose();
}
}
base.Dispose( disposing );
}

#region Windows 窗体设计器生成的代码
/// <summary>
/// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main()
{
//以MainForm作为主登录窗口
Application.Run(new MainForm());
}


private void buttonLogOn_Click(object sender, System.EventArgs e)
{
//设置SQL命令字符串
string commandstring;
commandstring="select * from Users";

//使用SqlCommand
SqlCommand myCommand;
myCommand=new SqlCommand();
myCommand.Connection=mainForm.myConnection;
myCommand.CommandText=commandstring;

//执行ExecuteReader()返回DataReader类
SqlDataReader myDataReader;
myDataReader=myCommand.ExecuteReader();
bool b_accept=false;
//循环读取DataReader中的每一个记录,看用户密码是否正确
while(myDataReader.Read())
{
//(4)
//如果用户名和密码正确的话设置b_accept为真
if(myDataReader.GetString(0).Trim()==textBoxUser.Text.Trim()&&myDataReader.GetString(1).Trim()==textBoxPW.Text.Trim())
{
b_accept=true;
break;
}
}
myDataReader.Close();

//如果用户密码正确,关闭当前窗口,否则显示错误信息
if(b_accept==true)
{
//显示用户信息
mainForm.currentUser=textBoxUser.Text;
this.Close();
}
else
{
MessageBox.Show("用户名或密码错误,请重新输入!","错误");
}

}

private void buttonExit_Click(object sender, System.EventArgs e)
{
//退出程序
Application.Exit();
}

private void buttonNewUser_Click(object sender, System.EventArgs e)
{
DialogResult result;

//(1)
//弹出确认信息
result=MessageBox.Show(this,"确定要添加新用户吗?","提示",MessageBoxButtons.YesNo,MessageBoxIcon.Question,MessageBoxDefaultButton.Button1,MessageBoxOptions.RightAlign);

//(2)
//确认要添加
if(result==DialogResult.Yes)
{
string commandstring;
//设置数据库查询语句
commandstring="select * from Users";
//使用SqlCommand
SqlCommand myCommand;
myCommand=new SqlCommand();
myCommand.Connection=mainForm.myConnection;
//设定查询语句为commandstring
myCommand.CommandText=commandstring;

//执行ExecuteReader()返回DataReader类
SqlDataReader myDataReader;
myDataReader=myCommand.ExecuteReader();
bool b_exist=false;

//循环读取DataReader中的每一个记录,看用户是否已经存在
while(myDataReader.Read())
{
//如果用户名已经存在的话设置b_exist为true
if(myDataReader.GetString(0).Trim()==textBoxUser.Text.Trim())
{
b_exist=true;
break;
}
}
myDataReader.Close();

//弹出提示信息,并退出新建用户事件
if(b_exist==true)
{
MessageBox.Show("对不起,该用户已经存在,请重新输入!","错误");
return;
}

//(3)
//用户不存在,添加用户
string sInsert="insert into Users (用户名,密码)"+" values ('"+textBoxUser.Text.Trim()+"','"+textBoxPW.Text.Trim()+")";
//设置添加记录字符串
//myCommand=new SqlCommand();
myCommand.CommandText=sInsert;
myCommand.Connection=mainForm.myConnection;

//(4)
//执行SQL命令
myCommand.ExecuteNonQuery();

//设置MainForm的当前用户,关闭登录窗口
mainForm.currentUser=textBoxUser.Text.Trim();
this.Close();
}
}
}
}
tangbingjun 2005-07-19
  • 打赏
  • 举报
回复
同意,这在DELPHI中已常出现的。
CnEve 2005-07-19
  • 打赏
  • 举报
回复
string sInsert="insert into Users (用户名,密码)"+" values ('"+textBoxUser.Text.Trim()+"','"+textBoxPW.Text.Trim()+")";

最后面少了个单引号
values ('"+textBoxUser.Text.Trim()+"','"+textBoxPW.Text.Trim()+"')";
sky592 2005-07-19
  • 打赏
  • 举报
回复
看得好晕,你还是在catch中捕捉一下错误吧,数据库中的错误一般不难的
wonderful_abc 2005-07-19
  • 打赏
  • 举报
回复
如wuzy1229(wuzy1229) 所说。
wuzy1229 2005-07-19
  • 打赏
  • 举报
回复
另外要加异常处理
wuzy1229 2005-07-19
  • 打赏
  • 举报
回复
'"+textBoxPW.Text.Trim()+"')";
cdo 2005-07-18
  • 打赏
  • 举报
回复
贴出sql语句来看看.
dahuzizyd 2005-07-18
  • 打赏
  • 举报
回复
检查下你的sql语句有没有错误,或者直接跟踪下,把sql语句拿到查询分析器里执行下
dahuzizyd 2005-07-18
  • 打赏
  • 举报
回复
检查下你的sql语句有没有错误,或者直接跟踪下,把sql语句拿到查询分析器里执行下
深山老翁 2005-07-18
  • 打赏
  • 举报
回复
可能SQL语句或参数出错,具体问题要看代码才能做决定。。呵呵。。

110,538

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧