2014-10-19 60 views
-2

我發現這篇文章的大部分代碼在這裏How to set SQL Server connection string?連接到C#中的SQL Server數據庫的問題

這裏就是我有,但:

SqlConnection conn = new SqlConnection(); 

conn.ConnectionString = "Data Source=(localdb)\\Instance;" + 
         "Initial Catalog=Database;" + 
         "User id=root;Password=pass;"; 

try 
{ 
    conn.Open(); 
} 
catch (Exception ex) 
{ 
    Console.WriteLine(ex.ToString()); 
} 

SqlCommand myCommand = new SqlCommand("INSERT INTO Database.dbo.Table" + 
             "VALUES ('stg', 'stg1', 'stg2', 'stg3');", conn); 

try 
{ 
    conn.Close(); 
} 
catch (Exception ex) 
{ 
    Console.WriteLine(ex.ToString()); 
} 

很多以前的代碼是給我的錯誤。有一次,我遇到了一個我無法連接到實例的錯誤。這是'\'的問題。它認識到它是一種逃避角色,所以我做了雙倍'\'來擺脫這種情況,所以我不再有這個錯誤,所以不應該是問題。

我得到了關於錯誤的用戶名和密碼的錯誤。我正在使用SQL Server身份驗證,我以前使用的代碼是指定Windows身份驗證。我再也沒有那個錯誤了。

截至目前,代碼一路執行,沒有錯誤。當我檢查數據庫時(我正在使用SQL Server Management Studio),沒有任何東西被插入到表中。我已經直接運行了Insert語句並且工作正常,所以我不確定問題在這裏。此外,我正在使用VS 2013.

+1

不想過於苛刻,但是在開始這種編程之前,您是否閱讀過任何ADO.NET教程?你手中有一個非常強大的工具,你應該試着瞭解它的工作原理,否則這些問題將會是一個反覆出現的情況。 – Steve 2014-10-19 21:31:05

回答

1

您沒有執行查詢。創建命令對象後補充一點:

myCommand.ExecuteNonQuery(); 

旁註:你還是有周圍所有的代碼try...catch,並且使用的連接和命令using塊。這將確保無論發生什麼事物都能正確關閉和處理對象:

try { 

    using (SqlConnection conn = new SqlConnection()) { 

    conn.ConnectionString = 
     "Data Source=(localdb)\\Instance;" + 
     "Initial Catalog=Database;" + 
     "User id=root;" + 
     "Password=pass;"; 

    conn.Open(); 

    using (SqlCommand myCommand = new SqlCommand("INSERT INTO Database.dbo.Table" + 
             "VALUES ('stg', 'stg1', 'stg2', 'stg3');", conn)) { 
     myCommand.ExecuteNonQuery(); 
    } 

    } 

} catch (Exception ex) { 
    Console.WriteLine(ex.ToString()); 
} 
+0

寫'catch(Exception)'是一個壞習慣,你不應該啓動新的程序員。至少,捕獲你期望的特定異常(在這種情況下,'SqlException')。更好的是,如果你的程序沒有處理異常的策略,不要讓它崩潰。 – 2014-10-20 08:16:15

+0

@JeroenMostert:這是一個很好的觀點,我正在考慮提及這一點,但保持它接近原始代碼。無論如何,將錯誤消息寫入控制檯似乎是處理錯誤的臨時措施。 – Guffa 2014-10-20 09:13:01

2

您沒有使用SqlCommand.ExecuteNonQuery來使用insert-command。因此沒有插入。

SqlCommand myCommand = new SqlCommand("INSERT INTO Database.dbo.Table" + 
             "VALUES ('stg', 'stg1', 'stg2', 'stg3');", conn); 
int inserted = myCommand.ExecuteNonQuery(); 

你也應該使用using語句來確保所有非託管資源被佈置和連接變得更加的錯誤關閉。那麼你不需要明確地使用conn.Close