【发布时间】:2015-03-15 15:50:32
【问题描述】:
我最近将更新 SQL 字符串从 动态 SQL 字符串 更改为 参数 SQL 字符串。这是我以前的:
OleDbConnection conn = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + this.DBstring);
OleDbCommand comm = new OleDbCommand();
comm.CommandText = "UPDATE myTable SET MY_FIELD='" + myString + "' WHERE F_SERIAL = '"+mySerial+"'";
comm.CommandType = CommandType.Text;
comm.Connection = conn;
conn.Open();
comm.ExecuteNonQuery();
conn.Close();
这是我现在拥有的:
OleDbConnection conn = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + this.DBstring);
OleDbCommand comm = new OleDbCommand();
comm.CommandText = "UPDATE myTable SET MY_FIELD = @myString WHERE F_SERIAL = @mySerial";
comm.Parameters.Add("@mySerial",OleDbType.VarWChar).Value = mySerial;
comm.Parameters.Add("@myString",OleDbType.VarWChar).Value = myString;
comm.CommandType = CommandType.Text;
comm.Connection = conn;
conn.Open();
comm.ExecuteNonQuery();
conn.Close();
参数设置正确,从即时窗口开始(我只显示第一个,但第二个具有相同的结构):
>>> comm.Parameters[0];
{@myString}
base {System.Data.Common.DbParameter}: {@myString}
DbType: String
Direction: Input
IsNullable: false
OleDbType: VarWChar
ParameterName: "@myString"
Precision: 0
Scale: 0
Size: 15
SourceColumn: ""
SourceColumnNullMapping: false
SourceVersion: Current
Value: "test ++ ìì''' "
然而,虽然第一个代码 sn-p 以前可以正常工作,但新代码却不行。没有引发错误,执行正常,但数据库中的值没有更新。有谁知道可能出了什么问题?我可能忘记做某事了吗? 抱歉这个愚蠢的问题,但我真的只有这个,无法弄清楚出了什么问题。
【问题讨论】:
-
对于初学者来说,之前和之后的 SQL 是不一样的。在第二个中,您在 SQL 中为一个传递 2 个参数(没有 WHERE)
-
这可能与此有关,也可能无关,但我注意到您的参数化命令,正如您所展示的,没有
where子句? -
对不起,我正在更新代码,我在复制代码时打错了。
-
您确定要为
@mySerial设置值吗? -
尝试捕捉ExecuteNonQuery的返回值。它是一个整数,用于计算查询更改了多少行。如果它为零,则没有记录与 @mySerial 参数匹配,如果它是 1 或更多,那么您没有查看正确的数据库。 (你在连接字符串中使用 |DataDirectory| 吗?)