[英]Insert a Data Table to Access Database using c#
I have tried few codes from my end to insert a DataTable
inside a Access
db. 我从头开始尝试了一些代码将
DataTable
插入Access
数据库中。 Below is the code: 下面是代码:
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
}
}
}
The DataTable
to be inserted has 8 columns, the table in Access
which i have created also has 8 columns. 要插入的
DataTable
有8列,我在Access
中创建的表也有8列。 When I execute the above piece of code, I encounter an exception. 当我执行上面的代码时,我遇到一个异常。 It says that:
它说:
ERROR [07002ױ] [Microsoft][ODBC Microsoft Access Driver] Too few parameters. Expected 8.
I'm providing 8 params, yet it throws the error. 我提供8个参数,但会引发错误。
Can anybody let me know what I am doing wrong? 有人可以让我知道我在做什么错吗?
There are at least two issues with your current code: 当前代码至少存在两个问题:
[1] Parameterized queries using System.Data.Odbc
with the Access ODBC driver must use the question mark ( ?
) for all parameter placeholders. [1]使用
System.Data.Odbc
和Access ODBC驱动程序进行参数化的查询必须对所有参数占位符使用问号( ?
)。 It is not recognizing @p1
@p2
, ... as parameters in the CommandText so you are getting the "Too few parameters" error. 它无法将
@p1
@p2
,...识别为CommandText中的参数,因此会出现“参数太少”错误。 You need to use 您需要使用
string cmdText="Insert into AccessTable (ColumnA,ColumnB,ColumnC,ColumnD,ColumnE,ColumnF,ColumnG,ColumnH)"
+ " Values (?,?,?,?,?,?,?,?)";
[2] If you are going to use Parameters.AddWithValue()
inside the loop you need to do a Parameters.Clear()
before adding the parameter values. [2]如果要在循环内使用
Parameters.AddWithValue()
,则需要在添加参数值之前执行Parameters.Clear()
。 (Without it, you will keep adding new parameter values - 8 at a time - instead of replacing the existing ones.) (没有它,您将继续添加新的参数值-一次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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.