无法在 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的使用小结

C# SqlDataAdapter.Fill 在传递数据表参数时给出关于数据转换的错误

C# SqlDataAdapter.Update()

c# SqlDataAdapter 不返回结果

创建新的 SqlDataAdapter 时出现 C# InvalidOperationException

C# DataSet:更新数据库