【问题标题】:How to check for errors when running DataAdapter/DataSet SQL query?运行 DataAdapter/DataSet SQL 查询时如何检查错误?
【发布时间】:2010-07-08 16:54:32
【问题描述】:

这就是我使用 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 语句,请同时指出。

【问题讨论】:

  • 一开始,请在发布代码时使用 标签 :) 或者,选择代码并按 Ctrl+K :)
  • @Ranhiru,感谢您向我展示了它是如何完成的,刚刚进行了编辑并更正了格式。

标签: vb.net dataset sqldataadapter


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-11
    • 1970-01-01
    • 2011-08-30
    • 1970-01-01
    相关资源
    最近更新 更多