如何在运行DataAdapter / DataSet SQL查询时检查错误?

时间:2010-07-08 16:54:32

标签: vb.net dataset sqldataadapter

这是我使用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)

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

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

非常感谢,

托德

1 个答案:

答案 0 :(得分:2)

对于update语句,您应该使用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);   
}