我在sql server表中有记录。我正在从SQL Server填写DataTable中的所有记录,之后我想在访问表中插入所有记录。但插入时没有数据插入和错误。请提供需要帮助
public bool SalesGenExistingCustomer_Insert_InAccessDB(DataTable DT)
{
bool flag = true;
int ii = DT.Rows.Count;
try
{
string SQL = "SELECT top 1 * FROM GenExistingcustomers";
string INSERT = "INSERT INTO GenExistingcustomers([CustomerId],[CompanyName],[BillingAddress],[City],[State],[Zip],[Phone],[Email])" +
" VALUES (@CustomerId,@CompanyName,@BillingAddress,@City,@State,@Zip,@Phone,@Email)";
OleDbConnection OleConn = new OleDbConnection(ConnString);
OleDbDataAdapter OleAdp = new OleDbDataAdapter(SQL, OleConn);
OleAdp.InsertCommand = new OleDbCommand(INSERT);
OleAdp.InsertCommand.Parameters.Add("@CustomerId", OleDbType.LongVarChar, 1008, "CustomerId");
OleAdp.InsertCommand.Parameters.Add("@CompanyName", OleDbType.LongVarChar, 1008, "CompanyName");
OleAdp.InsertCommand.Parameters.Add("@BillingAddress", OleDbType.LongVarChar, 1008, "BillingAddress");
OleAdp.InsertCommand.Parameters.Add("@City", OleDbType.LongVarChar, 1008, "City");
OleAdp.InsertCommand.Parameters.Add("@State", OleDbType.LongVarChar, 1008, "States");
OleAdp.InsertCommand.Parameters.Add("@Zip", OleDbType.LongVarChar, 4000, "Zip");
OleAdp.InsertCommand.Parameters.Add("@Phone", OleDbType.LongVarChar, 1008, "Phone");
OleAdp.InsertCommand.Parameters.Add("@Email", OleDbType.LongVarChar, 1008, "Email");
OleAdp.InsertCommand.Connection = OleConn;
OleAdp.InsertCommand.Connection.Open();
int i = OleAdp.Update(DT);
OleAdp.InsertCommand.Connection.Close();
}
catch (Exception ex)
{
LogFile(ex.ToString());
flag = false;
}
string ssss = DT.Rows[1][4].ToString();
return flag;
}
如果你添加一行像 -
DataRow dr;
dr = DT.NewRow();
dr[0] = "1";
dr[1] = "AAAA";
dr[2] = "3";
dr[3] = "4";
dr[4] = "5";
dr[5] = "6";
dr[6] = "7";
dr[7] = "8";
dr[8] = "9";
DT.Rows.Add(dr);
然后它插入一条记录但留下另一条记录。
答案 0 :(得分:0)
数据表中的行必须具有要由数据适配器插入数据库的正确状态(请参阅RowState属性)。 documentation说:
" 适配器的Update方法将更新单个数据表,并根据表中每个数据行的RowState执行正确的命令(INSERT,UPDATE或DELETE)。 / EM>"
在您的情况下,行应处于Added
状态。看起来他们不是。可能是因为调用了AcceptChanges方法。您可以通过调用DataRow.SetAdded方法强制Added
状态。