OLE数据库错误

时间:2016-09-07 17:31:20

标签: c# sql insert

我想重拍这个字符串:

string cmdstr = "INSERT into GGG (event_id, device_id, parameter_id, parameter_int_id, time_id, clock_id, user_id) VALUES ('" + s.Substring(0, 45) + "', '" + s.Substring(46, 31) + "', '" + s.Substring(77, 41) + "', '" + r.Match(s.Substring(77, 41)) + "',  '" + s.Substring(118, 19) + "', '" + s.Substring(118, 8) + "',  '" + s.Substring(138, 10) + "')";

我想使用parameters.AddWithValue。但我有错误。

这是我的新代码,错误:

con.Open();
com.CommandText = "insert into GGG (event_id, device_id, parameter_id, parameter_int_id, time_id, clock_id, user_id) values (@1p, @2p, @3p, @4p, @5p, @6p, @7p)";
com.Parameters.AddWithValue("@p1", s.Substring(0, 45));
com.Parameters.AddWithValue("@p2", s.Substring(46, 31));
com.Parameters.AddWithValue("@p3", s.Substring(77, 41));
com.Parameters.AddWithValue("@p4", r.Match(s.Substring(77, 41)));
com.Parameters.AddWithValue("@p5", s.Substring(118, 19));
com.Parameters.AddWithValue("@p6", s.Substring(118, 8));
com.Parameters.AddWithValue("@p7", s.Substring(138, 10));
com.ExecuteReader();

2 个答案:

答案 0 :(得分:0)

我很确定PhillipXT的评论在这里有答案。查询字符串中的变量(@ 1p等)与您将它们作为参数添加时的标记(@ p1等)不匹配。

添加参数时,它实际上会将命令文本中的字符串替换为您提供的值。在这种情况下,它将尝试用提供的值替换“@ p1”。但是,该字符串在命令文本中不存在。实际上,您的七个参数都不匹配命令文本中的名称。

更改名称的位置无关紧要,但这七个标签必须匹配。

答案 1 :(得分:0)

试试这个:

con.Open();
com.CommandText = "insert into GGG (event_id, device_id, parameter_id, parameter_int_id, time_id, clock_id, user_id) values (@p1, @p2, @p3, @p4, @p5, @p6, @p7)";
com.Parameters.AddWithValue("@p1", s.Substring(0, 45));
com.Parameters.AddWithValue("@p2", s.Substring(46, 31));
com.Parameters.AddWithValue("@p3", s.Substring(77, 41));
com.Parameters.AddWithValue("@p4", r.Match(s.Substring(77, 41)));
com.Parameters.AddWithValue("@p5", s.Substring(118, 19));
com.Parameters.AddWithValue("@p6", s.Substring(118, 8));
com.Parameters.AddWithValue("@p7", s.Substring(138, 10));
com.ExecuteReader();