代码之家  ›  专栏  ›  技术社区  ›  Sabuncu

运行dataadapter/dataset sql查询时如何检查错误?

  •  0
  • Sabuncu  · 技术社区  · 14 年前

    这是我如何使用DataAdapter和数据集在VB中使用SQL Server更新表:

    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方法是没有意义的,但是我对这项技术是陌生的,上面的语句完成了工作并更新了表w/o问题。我的问题是:如果有错误(比如重复的键错误),我如何在我的应用程序中知道这一点?我应该把上面的代码放在一个try/catch块中吗?

    另外,如果有一个“合适”的方法可以使用不使用fill方法的dataadapter/dataset组合运行insert语句,请同时指出这一点。

    多谢,

    托德

    1 回复  |  直到 12 年前
        1
  •  2
  •   Ranhiru Jude Cooray    14 年前

    对于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);   
    }