将 DataTable 保存到数据库表中
Posted
技术标签:
【中文标题】将 DataTable 保存到数据库表中【英文标题】:Save a DataTable into a database table 【发布时间】:2011-09-02 07:38:33 【问题描述】:我正在从我的应用程序生成一个数据表,我想将整个数据表保存到一个数据库表中。
DataTable ds = //add the info from the queue in the application
DataTable 正在生成,但是接下来要做什么。告诉我一些语法。我也不需要 select 语句,我只想将 DataTable 中的所有信息插入到已经创建的 db 表中(更新表) . 我将使用 ODBC 连接来访问 mysql 数据库
我想直接通过dataset将数据更新到数据库中
public void update(DataTable ds)
try
lock (myLockHolder)
X1 = 1;
OdbcConnection con =
new OdbcConnection(LocalConnection.GetLocalConnetionString());
OdbcCommand cmd;
OdbcDataAdapter da;
DataSet ds1=new DataSet();
string query = "";
query = "update parameter" + Environment.NewLine;
query += "set paramvalue=paramvalue,date_logged1=date_logged1,"
+ Environment.NewLine;
query += " Quality=Quality,date_logged=date_logged"
+ Environment.NewLine;
query += " where itemID=itemID";
cmd = new OdbcCommand(query, con);
da = new OdbcDataAdapter(cmd);
ds1=new DataSet();
ds1.Tables.Add(ds);
da.Update(ds1);
catch
finally
会像这个方法那样使用catch这个异常 “更新找不到 TableMapping['Table'] 或 DataTable 'Table'。”
【问题讨论】:
【参考方案1】:您应该创建插入 sql 字符串,遍历数据表中的所有行,为数据表中的每一列添加参数,然后执行此查询。
string sql = "INSERT INTO T (A, B, C) VALUES (@A, @B, @C)";
using (SqlConnection conn = new SqlConnection(connectionString))
conn.Open();
foreach (DataRow r in myTable.Rows)
SqlCommand cmd = conn.CreateCommand();
cmd.CommandText = sql;
cmd.Parameters.AddWithValue("@A", r["A"]);
cmd.Parameters.AddWithValue("@B", r["B"]);
cmd.Parameters.AddWithValue("@C", r["C"]);
cmd.ExecuteNonQuery();
【讨论】:
这很难看,但有点工作:) 除了它没有从一开始就清除表格。【参考方案2】:你写道:>我想要没有 foreach 循环
尝试使用dotConnect for MySQL 中的MySqlDataTable 类。阅读有关 MySqlDataTable.Update() 方法和 MySqlDataTable.CachedUpdates 状态的更多信息。
【讨论】:
我想直接通过dataset将数据更新到数据库中 看看这篇文章:'使用 DataAdapters (ADO.NET) 更新数据源' - msdn.microsoft.com/en-us/library/33y2221y.aspx【参考方案3】:using (SqlConnection conn = new SqlConnection(connectionString))
conn.Open();
foreach (DataRow r in dataTable2.Rows)
string sql = "INSERT INTO BALREP (ACODE, ANAME, QTY) VALUES ('" +r["CODE"] + "', '" + r["NAME"] + "', '" + r["CELL"] + "')";
SqlCommand cmd2 = con.CreateCommand();
cmd.CommandText = sql;
cmd.ExecuteNonQuery();
【讨论】:
这很容易受到 SQL 注入的影响,应该避免。【参考方案4】:dt.Rows.Clear();
try
SqlConnection con = new SqlConnection(ConnectDb.connectionstring);
SqlDataAdapter adp = new SqlDataAdapter("SELECT * FROM Admission",con);
con.Open();
adp.Fill(dt);
SqlConnection con2 = new SqlConnection(ConnectDb.onlinestring);
con2.Open();
foreach (DataRow r in dt.Rows)
SqlCommand check_User_Name = new SqlCommand("SELECT COUNT(*) FROM [Admission] WHERE ([studentName] = @SName)", con2);
check_User_Name.Parameters.AddWithValue("@SName", r["studentName"]);
int UserExist = (int)check_User_Name.ExecuteScalar();
if (UserExist > 0)
//Username exist
//MessageBox.Show("User Name is Already here");
else
SqlCommand cmd = new SqlCommand("INSERT INTO Admission(studentName, age, class, subject)VALUES(@name, @age, @class, @subject)", con2);
cmd.Parameters.AddWithValue("@name", r["studentName"]);
cmd.Parameters.AddWithValue("@age", r["age"]);
cmd.Parameters.AddWithValue("@class", r["class"]);
cmd.Parameters.AddWithValue("@subject", r["subject"]);
cmd.ExecuteNonQuery();
catch (Exception ex)
MessageBox.Show(ex.Message);
【讨论】:
以上是关于将 DataTable 保存到数据库表中的主要内容,如果未能解决你的问题,请参考以下文章
C#如何将datatable中的数据批量更新到MYSQL数据库
Oracle存储过程创建临时表,插入数据后,怎么返回临时表数据,并在asp.net中接收到datatable中
使用 SqlBulkCopy 将 DataTable 中的列映射到 SQL 表
ASP.NET把数据查询出来保存在了一个datatable里面了,之后我想把这个datatable的数据导入到access数据库