我从头开始尝试了一些代码DataTable
在Access
数据库中插入一个代码。下面是代码:
public void WriteToAccess(DataTable dt)
{
string strDSN = "DSN=MYDSN";
string cmdText="Insert into AccessTable (ColumnA,ColumnB,ColumnC,ColumnD,ColumnE,ColumnF,ColumnG,ColumnH) Values (@p1,@p2,@p3,@p4,@p5,@p6,@p7,@p8)";
using (OdbcConnection cn = new OdbcConnection(strDSN))
{
using (OdbcCommand cmd = new OdbcCommand(cmdText, cn))
{
cn.Open();
foreach (DataRow r in dt.Rows)
{
cmd.Parameters.AddWithValue("@p1", r["ColumnA"].ToString());
cmd.Parameters.AddWithValue("@p2", r["ColumnB"].ToString());
cmd.Parameters.AddWithValue("@p3", r["ColumnC"].ToString());
cmd.Parameters.AddWithValue("@p4", r["ColumnD"].ToString());
cmd.Parameters.AddWithValue("@p5", r["ColumnE"].ToString());
cmd.Parameters.AddWithValue("@p6", r["ColumnF"].ToString());
cmd.Parameters.AddWithValue("@p7", r["ColumnG"].ToString());
cmd.Parameters.AddWithValue("@p8", r["ColumnH"].ToString());
cmd.ExecuteNonQuery();//Exception at this line
}
}
}
所述DataTable
要插入的具有8列,在表中Access
,我已创建也具有8列。当我执行上面的代码时,我遇到一个异常。它说:
ERROR [07002ױ] [Microsoft][ODBC Microsoft Access Driver] Too few parameters. Expected 8.
我提供8个参数,但会引发错误。
有人可以让我知道我做错了吗?
当前代码至少存在两个问题:
[1]System.Data.Odbc
与Access ODBC驱动程序一起使用的参数化查询必须?
对所有参数占位符使用问号()。它无法将@p1
@p2
...识别为CommandText中的参数,因此会出现“参数太少”错误。您需要使用
string cmdText="Insert into AccessTable (ColumnA,ColumnB,ColumnC,ColumnD,ColumnE,ColumnF,ColumnG,ColumnH)"
+ " Values (?,?,?,?,?,?,?,?)";
[2]如果要Parameters.AddWithValue()
在循环内使用,则需要Parameters.Clear()
在添加参数值之前先做一个。(没有它,您将继续添加新的参数值-一次8个-而不是替换现有的。)
foreach (DataRow r in dt.Rows)
{
cmd.Parameters.Clear();
cmd.Parameters.AddWithValue("?", r["ColumnA"].ToString());
cmd.Parameters.AddWithValue("?", r["ColumnB"].ToString());
// and so on
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句