2012-04-27 37 views
0

有人可以告訴我爲什麼這不會將值添加到數據庫。表單運行正常,不會返回任何錯誤。C#數據庫問題

private void button1_Click(object sender, EventArgs e) 
    { 
     SqlConnection connection = new SqlConnection(); 
     SqlCommand command = new SqlCommand(); 

     connection.ConnectionString = (@"Data Source=.\SQLEXPRESS;AttachDbFilename=C:\Users\John\Documents\Setup.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True"); 

     command.Parameters.AddWithValue("@userName", textBox1.Text); 
     command.Parameters.AddWithValue("@passWord", textBox2.Text); 
     command.CommandText = "INSERT INTO Setup (userName, password) VALUES(@userName, @passWord)"; 



     try 
     { 
      connection.Open(); 
      int rowsAffected = command.ExecuteNonQuery(); 

     } 
     catch (Exception ex) 
     { 
      // handle exception 
     } 
     finally 
     { 
      connection.Close(); 
     } 


    } 

僅供參考:我是「新手」我的數據庫被稱爲安裝程序。我已經手動添加了一個名爲myTable的表,其中有兩列userName,另一個名爲password,它們都設置在nchar(50)

+0

變化'插入Setup'到'插入myTable' – MilkyWayJoe 2012-04-27 18:29:50

+2

提示 - 這是更好的(較短)以例如使用'using(){}''使用(SqlConnection連接=新的SqlConnection(連接字符串)) connection.Open(); //在這裏工作;連接在下面一行關閉。 }' – sinelaw 2012-04-27 18:29:59

回答

6

您需要指定Table,而不是數據庫(在連接字符串中使用該數據庫)。新增的模式前綴的表名:

command.CommandText = "INSERT INTO dbo.myTable (userName, password) VALUES (@userName, @passWord)"; 

並添加:

command.Connection = connection; 

Command對象與連接對象關聯。

+0

這仍然不起作用。就這樣,我正確地思考,一旦我點擊「顯示錶格數據」時,我已經運行了表格並關閉了它,新添加的值應該在那裏。 – user1353517 2012-04-27 18:33:58

+0

@ user1353517「發佈」的代碼應該可以工作。確保您的按鈕點擊事件已連線。當你點擊'button1'時,它是否運行代碼? – LarsTech 2012-04-27 18:35:58

+0

我認爲是因爲它沒有返回任何錯誤 – user1353517 2012-04-27 18:37:01

1

表單運行良好,不會返回任何錯誤。

這可能是因爲你在吞嚥它們。擺脫(或登錄)你的catch (Exception ex)

一般來說,.NET BCL是精心設計的 - 如果一個方法不起作用,你將會得到一個異常。

[現在]我有錯誤'ExecuteNonQuery:連接屬性尚未初始化。'

沒錯。您需要將SqlConnection傳遞給SqlCommand

SqlCommand command = new SqlCommand(); 
command.Connection = connection; 
+0

好吧,現在我有錯誤'ExecuteNonQuery:連接屬性尚未初始化。'在線int'rowsAffected = command.ExecuteNonQuery();'任何想法? – user1353517 2012-04-27 18:39:30

+0

@ user1353517 - 回答編輯 – 2012-04-27 18:44:34

+0

添加它我得到的錯誤'最好的重載方法匹配'system.data.sqlclient.sqlcommand.sqlcommand(string)'有一些無效的參數 – user1353517 2012-04-27 18:48:44

1

您的代碼應該是這個樣子:

  • 設置連接對象。
  • 指定@LarsTech提到的表名。
  • 指定表名如[Schema name].[Table Name]時,最好使用兩部分表示法。所以,你必須指定一個像dbo.MyTable

代碼的表名片斷

private void button1_Click(object sender, EventArgs e) 
{ 
    SqlConnection connection = new SqlConnection(); 
    connection.ConnectionString = (@"Data Source=.\SQLEXPRESS;AttachDbFilename=C:\Users\John\Documents\Setup.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True;"); 

    SqlCommand command = new SqlCommand(); 
    command.Connection = connection; 
    command.CommandText = "INSERT INTO dbo.MyTable (userName, password) VALUES (@userName, @passWord)"; 
    command.Parameters.AddWithValue("@userName", textBox1.Text); 
    command.Parameters.AddWithValue("@passWord", textBox2.Text); 

    try 
    { 
     connection.Open(); 
     int rowsAffected = command.ExecuteNonQuery(); 
    } 
    catch (Exception ex) 
    { 
     //handle exception 
    } 
    finally 
    { 
     connection.Close(); 
    } 
} 
+0

謝謝,但它仍然不會將值添加到數據庫:( – user1353517 2012-04-27 18:54:31

+0

只需右鍵單擊myTable - 顯示錶數據 – user1353517 2012-04-27 19:11:14