C# 如何将DataTable一次写入数据库 public void UpdateDataTable(DataTable DT)
{
SqlConnection Con = GetConnection();
string strSQL = "select * from orderitems" ;
if (Con.State == ConnectionState.Closed)
{
Con.Open();
}
try
{
SqlCommand Cmd = new SqlCommand(strSQL, Con);
SqlDataAdapter Dad = new SqlDataAdapter(Cmd);
Dad.Update(DT);
Con.Close();
}
catch (SqlException ex)
{
throw ex;
}
}执行程序后数据并没有插入数据库,请帮忙看看代码该如何修改
{
SqlConnection Con = GetConnection();
string strSQL = "select * from orderitems" ;
if (Con.State == ConnectionState.Closed)
{
Con.Open();
}
try
{
SqlCommand Cmd = new SqlCommand(strSQL, Con);
SqlDataAdapter Dad = new SqlDataAdapter(Cmd);
Dad.Update(DT);
Con.Close();
}
catch (SqlException ex)
{
throw ex;
}
}执行程序后数据并没有插入数据库,请帮忙看看代码该如何修改
我是要把内存中的DataTable直接插入到表OrderItems中,请问该如何写呢?
内存中的DataTable 结构和表OrderItems结构是一样的!
1 调用DataTable.Rows.Add(DataRow r)方法,r将被系统自动标记为Added;
2 对DataTable.Rows集合中的DataRow r调用 SetAdded方法。
DataRow Row = DT.NewRow();
Row.SetAdded();
DT.Rows.Add(Row );
这样写会报错,请问该在哪里设定 SetAdded()呢?
1 DataRow Row = DT.NewRow();
Row.ID = idvalue;// 一定要为所有不允许为NULL的field赋一个值
//赋值结束
DT.Rows.Add(Row);2 foreach(DataRow row in DT.Rows){
if(row.RowState != DataRowState.Added){
row.SetAdded();
}
}
建议你用第一种方法,第二种方法是手动处理,在特殊情况下才比较合适。
public void InsertTable(DataTable table1)
{ string strInsert = "insert into Number values (@value)";
SqlConnection conn = new SqlConnection(ConfigurationManager.AppSettings["connStr"]);
conn.Open();
SqlCommand com = new SqlCommand(strInsert, conn);
SqlParameter p1 = new SqlParameter("@value", SqlDbType.VarChar);
com.Parameters.Add(p1);
for (int i = 0; i < table1.Rows.Count; i++)
{
DataRow row = table1.Rows[i];
p1.Value = row[1].ToString();
com.ExecuteNonQuery();
}
conn.Close(); }
请帮忙看看这些代码,DataTable仍不能插入数据库
DataTable插入行:
DataRow Row = DT.NewRow();
Row["Input_Time"]='2004';
Row["Location_ID"]='dfd0';
///Row.SetAdded();
//////////////////////////////需要设定Row 的什么属性呢,Row.ID这个好像是没有的
DT.Rows.Add(Row ); 写入数据库
strSQL="select * from tblName";
SqlCommand Cmd = new SqlCommand(strSQL, Con);
SqlDataAdapter Dad = new SqlDataAdapter();
Dad.InsertCommand = Cmd;
SqlCommandBuilder Builder = new SqlCommandBuilder(Dad);
Dad.Update(DT);
DataAdapter只是一个适配器,它必须有相应的SqlCommand来为其工作,并且有什么样的SqlCommand就执行什么样的工作。
DataAdapter.SelectCommand用于获取数据,因此它的CommandText应该是select语句;
DataAdapter.InsertCommand用于插入数据,因此它的CommandText应该是insert语句;
DataAdapter.DeleteCommand用于删除数据,因此它的CommandText应该是delete语句;
DataAdapter.UpdateCommand用于更新数据,因此它的CommandText应该是update语句;因此你的代码应该这样写:
SelectSQL="select * from tblName";
SqlCommand SelectCmd = new SqlCommand(SelectSQL, Con); InsertSQL="insert into tblName (Input_Time,Location_ID) values (@Input_Time,@Location_ID)";
SqlCommand InsertCmd = new SqlCommand(InsertSQL, Con);
InsertCmd.Parameters.Add(new System.Data.SqlClient.SqlParameter("@Input_Time",System.Data.SqlDbType.Time));
InsertCmd.Parameters.Add(new System.Data.SqlClient.SqlParameter("@Location_ID",System.Data.SqlDbType.NVarChar));SqlDataAdapter Dad = new SqlDataAdapter();
Dad.SelectCommand = SelectCmd;
Dad.InsertCommand = InsertCmd;
Dad.Update(DT);
随便多少表,只要你的sql能插入成功就行。