13

我是 C# 和 SQL 的新手。现在我从一个表单访问一个类中的一个函数。

我的代码是

public void updateSupplierInformation(string id, string name, string balance, string place, string address, string phone, string bankname, string bankbranch, string accountno)
{
        if (conn.State == ConnectionState.Closed)
        {
            conn.Open();
        }

        SqlCommand NewCmd = conn.CreateCommand();
        NewCmd.Connection = conn;
        NewCmd.CommandType = CommandType.Text;
        NewCmd.CommandText = " update supplier set " + " ID = " + "'" + id + "'" + " , NAME = " + "'" + name + "'" + " , BALANCE = " + "'" + balance + "'" + " , PLACE = " + "'" + place + "'" + "  , LOCATION = " + "'" + address + "'" + ",  PHONE = " + "'" + phone + "'" + " , BANK_NAME = " + "'" + bankname + "'" + " , BANK_BRANCH = " + "'" + bankbranch + "'" + ", ACCOUNT_NO = " + "'" + accountno + "'" + " where ID = " + "@id";
        NewCmd.Parameters.AddWithValue("@id",id);
        NewCmd.ExecuteNonQuery(); 
        conn.Close();
    }

现在,如果给定的数据库中不存在记录,id应用程序将立即停止。我该如何处理?我想显示输入数据错误的消息并要求用户输入其他数据

4

5 回答 5

27

ExecuteNonQuery() 返回受 INSERT、UPDATE 或 DELETE 语句影响的行数。如果您需要检查 sql 异常,您必须在函数中包含 try catch 语句。

public void updateSupplierInformation(string id, string name, string balance, string place, string address, string phone, string bankname, string bankbranch, string accountno)
    {
       try
       {
        if (conn.State == ConnectionState.Closed)
        {
            conn.Open();
        }

        SqlCommand NewCmd = conn.CreateCommand();
        NewCmd.Connection = conn;
        NewCmd.CommandType = CommandType.Text;
        NewCmd.CommandText = " update supplier set " + " ID = " + "'" + id + "'" + " , NAME = " + "'" + name + "'" + " , BALANCE = " + "'" + balance + "'" + " , PLACE = " + "'" + place + "'" + "  , LOCATION = " + "'" + address + "'" + ",  PHONE = " + "'" + phone + "'" + " , BANK_NAME = " + "'" + bankname + "'" + " , BANK_BRANCH = " + "'" + bankbranch + "'" + ", ACCOUNT_NO = " + "'" + accountno + "'" + " where ID = " + "@id";
        NewCmd.Parameters.AddWithValue("@id",id);
        int a=NewCmd.ExecuteNonQuery(); 
        conn.Close();
        if(a==0)
          //Not updated.
        else
          //Updated.
        }
        catch(Exception ex)
         {
         // Not updated
         }
    }
于 2013-01-12T12:24:33.053 回答
22

ExecuteNonQuery返回受影响的行数 - 如果为 0,则表示没有匹配的行要更新。当然,只有当更新在不引发异常方面实际上“有效”时……而我怀疑它在您的情况下引发了异常,这可能与数据库中存在的行无关。(请注意,您可能没有显示某些代码确实取决于现有的行。)

此外:

  • 您应该对所有参数使用参数化 SQL,而不是将值直接包含在 SQL 中。
  • 您应该使用using语句来可靠地处理资源。
  • 看起来您正在使用单个连接 - 不要那样做。using每次要执行数据库操作时都创建(并通过)一个新连接,并让连接池处理效率
  • 找出应用程序刚刚停止的原因。几乎可以肯定会抛出异常,当发生这种情况时,您可以获得异常的详细信息,这一点非常重要。根据确切的上下文,您可能想要抓住它并继续(在某个较高级别)......但您至少应该始终记录它。

我的猜测(随意检查)是问题在于您的更新语句试图更新 ID,这可能是只读的。但是当您修复异常处理时,您会发现这一点。

于 2013-01-12T12:10:55.153 回答
1

只需检查条件

int a=NewCmd.ExecuteNonQuery(); 
    if(a==0)
      //Not updated.
    else
      //Updated.

ExecuteNonQuery() -> 这个函数返回整数值。

谢谢

于 2019-12-19T07:35:19.713 回答
1

我知道已经发布了一个答案,但让我们试试别的:

SqlConnection SQLConn = new SqlConnection("datahere");
SqlCommand SQLComm = new SqlCommand();
SQLcomm.Connection = SQLConn;
SQLConn.Open();
SQLComm.CommandText = "SQL statement goes here"
SqlDataReader dataReader = SQLComm.ExecuteReader();
dataReader.Read();
if(dataReader.HasRows == true){ //if it has rows do code
//do code
}
else{
// do other code
}

HasRows 将返回一个布尔值

于 2016-11-25T13:46:53.823 回答
0

让 sql =UPDATE TABLE SET column = '${data}' WHERE column = "value

db.query(sql, (err, result)=> {
            
            console.log(result.affectedRows);
            if(err) {
                console.log(err);
                return res.send({
                    message: "Error occured. please retry",
                });
            } else if(result.affectedRows != 0) {
                console.log(result)
                return res.send({
                    success:true,
                    message: "updated!"
                });

            }else if(result.affectedRows == 0) {
                console.log(result)
                return res.send({
                    success:false,
                    message: "not updated!"
                });
            } else {
                console.log(result)
            }
        })
//this is a nodejs code
于 2021-02-25T10:12:32.103 回答