当使用c#关闭与SQL server的连接时

本文关键字:server SQL 连接 | 更新日期: 2023-09-27 18:03:41

public void addRow( string[] values)
{
    string addrow = "INSERT INTO " + tableName + " VALUES ( ' ";
    for (int i = 0; i < values.Length; i++)
    {
        addrow += values[i] + "' ";
        if (i == values.Length - 1)
            break;
        addrow += " ,' ";
    }
    addrow += " )";
    createConnection();
    sqlcmd = new SqlCommand(addrow, sqlcon);
    sqlcmd.Connection.Open();
    sqlcmd.BeginExecuteNonQuery();
    //sqlcmd.Connection.Close();
}

这个方法在我的类SqlCmds应该添加新行到我的本地数据库,但当关闭连接没有任何事情发生在我的数据库,我必须离开连接打开添加新行我该怎么办?

提前致谢:D */

当使用c#关闭与SQL server的连接时

Try

sqlcmd.ExecuteNonQuery()

你还应该考虑把一次性对象包装在using语句中,让它处理对象的关闭/处置。

让我们做正确的:

public void addRow (string[] values) {
  // Validate public methods arguments 
  if (null == values)
    throw new ArgumentNullException("values"); 
  // Make the query parametrized: it's faster and not prone to SQL injection 
  // Do not append String in a loop; use Join instead
  string sql = string.Format("INSERT INTO {0} VALUES ({1})",
    tableName, 
    string.Join(", ", values.Select((item, index) => "@param_" + index.ToString()));
  // wrap IDisposable into using
  // let createConnection() return the connection created 
  using (var con = createConnection()) {
    con.Open();
    // wrap IDisposable into using
    using (var cmd = new SqlCommand(sql, con)) {
      // Parametrized query: parameters assigning
      for (int index = 0; index < values.Length; ++index)
        cmd.Parameters.AddWithValue("@param_" + index.ToString(), values[i]); 
      // Finally query executing
      cmd.ExecuteNonQuery();
    }
  }
}