如何实际执行命令?

时间:2015-12-22 10:05:00

标签: c# sql

我正在玩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的调用是按照应该执行的。但是,正在创建的数据库中没有新行。

我在配置文件中使用了相同的连接字符串,并且在SQL Manager中使用了粘贴的命令。

所以我怀疑是虽然我创建了一个插入命令,但我从来没有真正执行它,但根据MSDN它应该是如何工作的。

我在这里想念的是什么蠢事?

4 个答案:

答案 0 :(得分:2)

您应该使用ExecuteNonQuery代替。使用SqlDataAdapter进行INSERT查询没有意义。

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

答案 1 :(得分:2)

您遗失了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(); 
}

答案 2 :(得分:1)

您链接的示例返回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

答案 3 :(得分:1)

你可以:

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