2015-12-22 46 views
1

我正在玩弄一個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!"; 
} 

我看到的文字是快樂的,所以我認爲沒有例外。因此,我得出結論:對數據庫的調用按照預期執行。但是,數據庫中沒有創建新行。

我使用了與我在配置文件中相同的連接字符串,以及從SQL管理器中粘貼的命令,它在那裏工作。

所以我的懷疑是,雖然我創建了一個插入命令,我從來沒有真正執行它,但根據MSDN這就是它應該如何工作。

我在這裏想念什麼愚蠢的東西?

+3

adapter.InsertCommand.ExecuteNonQuery(); ? – Valentin

+0

@Valentin啊哈!我嘗試了intellisensing for * execute *,但是我只在適配器上這樣做。驢我!發佈作爲答覆,所以我可以接受作爲答案,請。 –

+0

connection.Open()也許。 – mecek

回答

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

您應該改用ExecuteNonQuery。對INSERT查詢使用SqlDataAdapter沒有意義。

你也應該Open你的連接只是然後再執行它。

+0

真實的評論。但正如我所說:「*玩弄POC *」。這不是它將被長期使用。 –

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

+0

保留答覆,因爲這對此任務確實很有價值。在我的情況下,我也會做其他的事情,所以它更適合,但是樣本+1。無論如何,你很好地回答了實際問題。 :) –

1

您可以:

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

在你的回覆中可以自由地改變一下。很好地制定,但+1。 –