无法在 c# 中使用 SqlDataAdapter 和 MSSqlServer 插入数据库
Posted
技术标签:
【中文标题】无法在 c# 中使用 SqlDataAdapter 和 MSSqlServer 插入数据库【英文标题】:Can not Insert into Database with SqlDataAdapter and MSSqlServer in c# 【发布时间】:2014-11-18 21:22:18 【问题描述】:我想用 DataAdapter 将新记录插入到 DataTable 中。 Person 表中有 2 列。名字和姓氏。 我有如下代码。
SqlConnection connection;
DataSet dsPerson;
SqlDataAdapter adapter;
string connectionString = Properties.Resources.ConnectionString;
connection = new SqlConnection(connectionString);
dsPerson = new DataSet("PersonDataSet");
adapter = new SqlDataAdapter();
SqlCommand selectCommand = new SqlCommand("SELECT * FROM Person", connection);
adapter.SelectCommand = selectCommand;
adapter.Fill(dsPerson, "Person");
string insertQuery = "INSERT INTO Person(FirstName, LastName) VALUES (@FirstName, @LastName)";
SqlCommand insertCommand = new SqlCommand(insertQuery, connection);
insertCommand.Parameters.Add(new SqlParameter("@FirstName", SqlDbType.NVarChar));
insertCommand.Parameters["@FirstName"].SourceVersion = DataRowVersion.Current;
insertCommand.Parameters["@FirstName"].SourceColumn = "FirstName";
insertCommand.Parameters.Add(new SqlParameter("@LastName", SqlDbType.NVarChar));
insertCommand.Parameters["@LastName"].SourceVersion = DataRowVersion.Current;
insertCommand.Parameters["@LastName"].SourceColumn = "LastName";
adapter.InsertCommand = insertCommand;
但是当我尝试将新记录插入 DataSet 时,它会出现在 DataSet 中。但它不会将新记录插入数据库。 插入代码如下。
connection.Open();
DataRow newRow = dsPerson.Tables["Person"].NewRow();
newRow["FirstName"] = "Joseph";
newRow["LastName"] = "Sword";
dsPerson.Tables["Person"].Rows.Add(newRow);
dsPerson.Tables["Person"].AcceptChanges();
dsPerson.AcceptChanges();
adapter.Update(dsPerson, "Person");
connection.Close();
我什至尝试使用 Express Profiler 跟踪发送到 sql server 的查询。我看到它没有向数据库发送插入命令。 那么问题是什么?如何解决? 谢谢。
【问题讨论】:
【参考方案1】:您不应调用数据集和 DataTable 的 AcceptChanges
方法,因为 DataAdapter.Update
方法仅影响数据表中更改/添加/删除的行。
但是在调用 AcceptChanges 之后,您的所有 DataRows 都将具有 Unchanged
状态。
有关 DataAdapter 的参考,请参阅 MSDN:
当应用程序调用 Update 方法时,DataAdapter 会检查 RowState 属性,并执行所需的 INSERT、UPDATE 或 DELETE 语句迭代地为每一行,基于的顺序 DataSet 中配置的索引。
【讨论】:
以上是关于无法在 c# 中使用 SqlDataAdapter 和 MSSqlServer 插入数据库的主要内容,如果未能解决你的问题,请参考以下文章
C# SqlDataAdapter.Fill 在传递数据表参数时给出关于数据转换的错误