0

这就是我使用 SQL Server 在 VB 中使用 DataAdapter 和 DataSet 更新表的方式:

sqlStmt = String.Format("INSERT INTO my_table (name, lastname) VALUES ('John', 'Doe')")
ds = New DataSet
da = New SqlDataAdapter(sqlStmt, My.Settings.ConnectionString)
da.Fill(ds)

我知道 Fill 方法在 INSERT 语句的情况下没有意义,但我是这项技术的新手,上面的语句完成了这项工作并更新了没有问题的表。我的问题是:如果出现错误(比如重复键错误),我如何在我的应用程序中知道这一点?我应该将上面的代码放在 try/catch 块中吗?

此外,如果存在使用不使用 Fill 方法的 DataAdapter/DataSet 组合运行 INSERT 语句的“正确”方法,请同时指出。

4

1 回答 1

2

对于更新语句,您应该使用 SqlCommand 对象。

SqlCommand cmd = new SqlCommand( "INSERT INTO my_table (name, lastname) VALUES ('John', 'Doe')", My.Settings.ConnectionString);

cmd.ExectureNonQuery();

但是,如果您有机会从用户那里获取数据以减少 SQL 注入攻击的机会,建议您使用参数化 SQL 查询:)

SqlCommand cmd = new SqlCommand( "INSERT INTO my_table (name, lastname) VALUES (@FirstName, @LastName)", My.Settings.ConnectionString);

cmd.Parameters.Add("FirstName", SqlDbType.NVarChar);
cmd.Parameters.Add("LastName", SqlDbType.NVarChar);

cmd.Parameters[0].Value = txtFirstName.Text;
cmd.Parameters[1].Value = txtLastName.Text;

cmd.ExecuteNonQuery();

回答你的另一个问题:

是的。如果存在主键冲突,将抛出 SQLException。您可以使用 try-catch 块捕获它并显示消息或执行任何适当的操作。

try
{
  cmd.ExecuteNonQuery();
}
catch (Exception ex)
{      
  MessageBox.Show("Error! " + ex.Message);   
}
于 2010-07-08T18:19:13.723 回答