【发布时间】:2014-11-23 12:43:20
【问题描述】:
【问题讨论】:
-
表 SetUp_Track 是否只包含问题中提到的这 6 个字段?
-
这些是唯一的字段加上数据库上设置为 AutoNumber 的 ID,我担心这是 Last_Good_Time 和 First_Good_Time 我不确定我是否将数据类型正确传递给 DB。跨度>
标签: c# ms-access ms-access-2010
【问题讨论】:
标签: c# ms-access ms-access-2010
VALUES 子句应该是括在括号中的项目列表,()。你的省略了结束)。
【讨论】:
您真正的问题是忘记在VALUES 部分的末尾使用)。
INSERT INTO SetUp_Track
values(@Operat, @Maching, @Last_Good_Time,
@First_Good_Time, @Post_Number, @Created
^here
始终首先在数据库管理器中尝试您的命令。但更重要的是,OleDbCommand 不接受命名参数。
来自OleDbCommand.Parameters property
OLE DB .NET 提供程序不支持传递命名参数 SQL 语句或存储过程的参数 当 CommandType 设置为 Text 时的 OleDbCommand。在这种情况下, 应使用问号 (?) 占位符
must。例如:SELECT * FROM Customers WHERE CustomerID = ?
因此,OleDbParameter 对象添加到 OleDbParameterCollection 必须直接对应的位置 命令文本中参数的问号占位符。
还可以使用using statement 来处理您的OleDbConnection 和OleDbCommand。
【讨论】:
? 占位符不是绝对要求。命名参数 do 有效,但名称无关;重要的是 CommandText 中参数的 position 和添加它们的 order。 (这就是为什么我认为应该使用? ,以防止人们产生错误的想法。)
? 只是OleDbCommand 参数化的常用方法。名字完全被忽略了。唯一的问题是他们的命令。
尽量不要使用命名参数:
ad.InsertCommand = new OleDbCommand("INSERT INTO SetUp_Track (Operat, Maching, Last_Good_Time, First_Good_Time, Post_Number, Created) values (?, ?, ?, ?, ?, ?)", con);
还有,
.Parameters.AddWithValue 中的所有参数都以 String 类型发送,
检查所有这些参数是否也在db中定义为String类型,
例如,如果 Post_Number 在 db 中是 Integer,那么您应该将 String 转换为 Integer,然后使用 .Parameters.AddWithValue
ad.InsertCommand.Parameters.AddWithValue("@Post_Number", Convert.ToInt32(Post_NumberTxtbx.Text));
【讨论】: