C#的WinForm程序添加一条记录能添加到DataGridView中显示了,但是不能插入到数据库中,为什么?

代码:
public void ExecuteSQL(string sql, params SqlParameter[] parameter)
{
try
{
conn.Open();
com = new SqlCommand(sql,conn);
foreach (SqlParameter param in parameter)
{
com.Parameters.Add(param);//将参数添加到Parameters集合中
}
com.ExecuteNonQuery();//执行SQL
}
finally { conn.Close(); }
}
//调用方法关键代码:
string sql = "insert into student(stuid,stuname,password,gender) values(@id,@name,@pwd,@gender)";
SqlParameter p1 = new SqlParameter("@id",id);
SqlParameter p2 = new SqlParameter("@name",name);
SqlParameter p3 = new SqlParameter("@pwd",id);
SqlParameter p4 = new SqlParameter("@gender",gender);
dg.ExecuteSQL(sql,p1,p2,p3,p4);
MessageBox.Show("添加学生成功", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
this.Close();
FrmStuManage form = new FrmStuManage();
form.Show();
提示添加成功,并且在DataGridView中显示,但查看student表却没有刚增加的记录,调试过sql无问题,何解???

第1个回答  2012-05-29
string strSql = "insert into tb_News(Ntitle,NContent,Add_User,Add_Time) values(@Ntitle,@NContent,@Add_User,@Add_Time)";
string strconn = ConfigurationSettings.AppSettings["dsn"];
//连接本地计算机的TMS数据库
SqlConnection cn = new SqlConnection(strconn);
cn.Open();
//利用Command对象调用存储过程
SqlCommand cm = new SqlCommand(strSql, cn);
//将命令类型转为存储类型
cm.CommandType = CommandType.Text;
//往存储过程中添加参数
cm.Parameters.Add("@Ntitle", SqlDbType.NVarChar, 50);//数据库字段长度必须是大于等于50的
cm.Parameters.Add("@NContent", SqlDbType.NText);
cm.Parameters.Add("@Add_User", SqlDbType.NVarChar, 50);
cm.Parameters.Add("@Add_Time", SqlDbType.NVarChar, 50);
//给存储过程的参数付值
cm.Parameters["@Ntitle"].Value = tbtitle.Text.ToString().Trim();
cm.Parameters["@NContent"].Value = FCKeditor1.Value.ToString().Trim();
cm.Parameters["@Add_User"].Value = Session["uid"].ToString();
cm.Parameters["@Add_Time"].Value = lbaddtime.Text.ToString().Trim();
cm.ExecuteNonQuery();

正解
第2个回答  2012-05-29
SqlParameter p4 = new SqlParameter("@gender",gender); //这里不加字段类型和,长度,可能会产生错误追问

能说明白点吗?或者举例,我写web程序是都是这么用的喔,为什么到WinForm就不行了呢?

追答

string strSql = "insert into tb_News(Ntitle,NContent,Add_User,Add_Time) values(@Ntitle,@NContent,@Add_User,@Add_Time)";
string strconn = ConfigurationSettings.AppSettings["dsn"];
//连接本地计算机的TMS数据库
SqlConnection cn = new SqlConnection(strconn);
cn.Open();
//利用Command对象调用存储过程
SqlCommand cm = new SqlCommand(strSql, cn);
//将命令类型转为存储类型
cm.CommandType = CommandType.Text;
//往存储过程中添加参数
cm.Parameters.Add("@Ntitle", SqlDbType.NVarChar, 50);//数据库字段长度必须是大于等于50的
cm.Parameters.Add("@NContent", SqlDbType.NText);
cm.Parameters.Add("@Add_User", SqlDbType.NVarChar, 50);
cm.Parameters.Add("@Add_Time", SqlDbType.NVarChar, 50);
//给存储过程的参数付值
cm.Parameters["@Ntitle"].Value = tbtitle.Text.ToString().Trim();
cm.Parameters["@NContent"].Value = FCKeditor1.Value.ToString().Trim();
cm.Parameters["@Add_User"].Value = Session["uid"].ToString();
cm.Parameters["@Add_Time"].Value = lbaddtime.Text.ToString().Trim();
cm.ExecuteNonQuery();

第3个回答  2012-05-29
关掉数据库后重新启动数据库软件一下就能看到你插入的数据了。
第4个回答  2012-05-29
刷新一下在看数据库追问

FrmStuManage form = new FrmStuManage();
form.Show();
这代码刷新了DataGridView了,有刚添加的记录,但是数据库却没有

追答

在数据库里用sql语句查看那个表

相似回答