其他信息: 必须声明变量 '@sno'。 请问什么原因 ?谢谢

dprk 2007-05-18 12:37:13
OleDbConnection con = new OleDbConnection("Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;User ID=sa;Initial Catalog=test;Data Source=DM");
string sql = "insert into stu ( stu_sno,stu_sname) values( @sno,@sname )";
//string sql = "delete from stu";
OleDbCommand com = new OleDbCommand( sql, con );
com.Parameters.Add("@sno", SqlDbType.Int);
com.Parameters["@sno"].Value = 12;// System.Convert.ToInt32(this.textBox1.Text);
com.Parameters.Add("@sname", SqlDbType.NVarChar);
com.Parameters.AddWithValue("@sname", this.textBox2.Text);
com.Parameters["@sname"].Value = this.textBox2.Text;

OleDbDataAdapter ada = new OleDbDataAdapter();
ds = new DataSet();
//ada.SelectCommand.CommandText = "select * from stu";
con.Open();
com.ExecuteNonQuery();
ada.Fill(ds, "studentinfo");
con.Close();

执行到 com.ExecuteNonQuery();
就发生异常

未处理的“System.Data.OleDb.OleDbException”类型的异常出现在 System.Data.dll 中。

其他信息: 必须声明变量 '@sno'。

请问什么原因 ?谢谢
...全文
861 11 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
dprk 2007-05-18
  • 打赏
  • 举报
回复
这个项目是从 2002转成2005的
dprk 2007-05-18
  • 打赏
  • 举报
回复

amandag(高歌)
不行 还是报错
dprk 2007-05-18
  • 打赏
  • 举报
回复
但我另外一个程序段代码用的和这段代码一样 但运行正常啊

SqlConnection scon = new SqlConnection();
scon.ConnectionString = "server=localhost;database=t;uid=sa;pwd=";

string sql = "insert into test ( sn, name ) values ( @sn,@name )";
SqlCommand com = new SqlCommand( sql, scon );

com.Parameters.Add( "@sn",SqlDbType.Int );
com.Parameters["@sn"].Value = this.textBox1.Text;
com.Parameters.Add("@name", SqlDbType.VarChar);
com.Parameters["@name"].Value = this.textBox2.Text;

scon.Open();
com.ExecuteNonQuery();
scon.Close();

string s = this.dataGridView1.CurrentRow.Cells[0].Value.ToString();
string s1 = this.dataGridView1.CurrentRow.Cells[1].Value.ToString();

sql = "delete from test where sn=@sn and name=@name";
com.CommandText = sql;
com.Parameters["@sn"].Value = s;
com.Parameters["@name"].Value = s1;

DataSet da = new DataSet();
string sel = "select * from test";
SqlDataAdapter ada = new SqlDataAdapter(sel, scon.ConnectionString);

scon.Open();
com.ExecuteNonQuery();
ada.Fill(da, "orders");
scon.Close();
dataGridView1.DataSource = da.Tables["orders"];
amandag 2007-05-18
  • 打赏
  • 举报
回复
OleDbConnection con = new OleDbConnection("Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;User ID=sa;Initial Catalog=test;Data Source=DM");
string sql = "insert into stu ( stu_sno,stu_sname) values( @sno,@sname )";
OleDbCommand com = new OleDbCommand( sql, con );
com.Parameters.Add("@sno", SqlDbType.Int).Value = 12;
com.Parameters.Add("@sname", SqlDbType.NVarChar).Value = this.textBox2.Text;
con.Open();
com.ExecuteNonQuery();
con.Close();
dprk 2007-05-18
  • 打赏
  • 举报
回复
拜托 究竟是什么问题阿 ?
fenglu0717 2007-05-18
  • 打赏
  • 举报
回复
这样试试:
SqlParameter sqlPara1 = new SqlParameter("@sno",SqlDbType.Int);
sqlPara1.SourceColumn = "stu_sname";//指定变量对应的列名
sqlPara1.SourceVersion = DataRowVersion.Current;//设置参数的版本,其中Current表示该参数可以修改,若不能修改则写为Original
updateCommand.Parameters.Add(sqlPara1);

你用到的每一个带@的参数都要这样配置一下,这是要跟数据库中相应的表进行关联,也就是要指定你的参数是指向哪张表的哪一列的
amandag 2007-05-18
  • 打赏
  • 举报
回复
还有,你连的数据库是SQL Server,干吗用OleDb的方式

dprk 2007-05-18
  • 打赏
  • 举报
回复
插入
amandag 2007-05-18
  • 打赏
  • 举报
回复
楼主,你究竟是打算做插入还是打算做查询?
dprk 2007-05-18
  • 打赏
  • 举报
回复
天哪 微软还整天宣扬他的框架设计如何统一呢 垃圾


谢谢amandag(高歌)
amandag 2007-05-18
  • 打赏
  • 举报
回复
你用的是OleDb的方式...

代码要这样改
string sql = "insert into stu (stu_sno,stu_sname) values(?,?)";
OleDbCommand com = new OleDbCommand(sql, con);
com.Parameters.Add("?", SqlDbType.Int).Value = 11;
com.Parameters.Add("?", SqlDbType.NVarChar).Value = "abc";
con.Open();
com.ExecuteNonQuery();
con.Close();

111,112

社区成员

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

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

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