如何实际执行命令

本文关键字:命令 执行 何实际 | 更新日期: 2023-09-27 18:27:39

我正在做一个POC,我创建了以下调用。

public string DoStuff()
{
  try
  {
    using (SqlDataAdapter adapter = new SqlDataAdapter())
    {
      SqlConnection connection = new SqlConnection("Server...");
      string command = "insert into Records values (...)";
      adapter.InsertCommand = new SqlCommand(command, connection);
    }
  }
  catch (Exception exception)
  {
    return exception.Message + " " + exception.InnerException;
  }
  return "WeeHee!";
}

我看到的返回文本是愉快的,所以我得出结论,没有例外。因此,我得出结论,对DB的调用是按预期执行的。然而,在创建的DB中没有新行。

我使用的连接字符串与配置文件中的连接字符串相同,并且命令是从SQL管理器粘贴进来的,它在SQL管理器中工作。

所以我怀疑,尽管我创建了一个insert命令,但我从未真正执行过它,但根据MSDN的说法,它应该是这样工作的。

我错过了什么愚蠢的事?

如何实际执行命令

您缺少connection.Open();adapter.InsertCommand.ExecuteNonQuery();

using (SqlDataAdapter adapter = new SqlDataAdapter())
{
  SqlConnection connection = new SqlConnection("Server...");
  connection.Open();
  string command = "insert into Records values (...)";
  adapter.InsertCommand = new SqlCommand(command, connection);
  adapter.InsertCommand.ExecuteNonQuery(); 
}

您应该使用ExecuteNonQuery。将SqlDataAdapter用于INSERT查询是没有意义的。

此外,在执行之前,您应该Open您的连接

您可以:

using(SqlConnection connection = new SqlConnection("Server..."))
{
  SqlCommand command = connection.CreateCommand();
  command.CommandText = "insert into Records values (...)";
  connection.Open();
  int craeted = command.ExecuteNonQuery();
}

链接到的示例返回了一个SQLAdapter供以后使用。

你根本不需要

 using (SqlConnection connection = new SqlConnection("Server..."))
 {
     string command = "insert into Records values (...)";
     connection.Open();
     var command = new SqlCommand(command, connection);
     command.ExecuteNonQuery();
 }

请注意,根据预期的返回值以及是否需要异步操作,还有其他执行方法:https://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlcommand(v=vs.110).aspx