2016-01-20 44 views
0

我想連接到本地機器上的SQL Server,運行一個SQL命令對它並記錄結果。代碼在與服務器建立連接時失敗。不能使SQL Server連接C#

我不明白我在做什麼錯。我搜索過的任何東西都不適用於這種方法,或者似乎與我正在做的事情相匹配。我認爲我在代碼中還有其他問題,但我甚至無法通過SQL連接來測試其餘的問題。這裏是我的代碼:

string svrConnection = "Server=.\\sqlexpress;Database="+db+";User ID=user;Password=password;"; 

SqlConnection con; 
SqlCommand cmd; 

Directory.CreateDirectory("C:\\"db"\\"); 
FileInfo file = new FileInfo("C:\\script.sql"); 

string PCS = file.OpenText().ReadToEnd(); 
con = new SqlConnection(svrConnection); 

StreamWriter PCSLog = new StreamWriter(@"C:\\" + db + "\\Log" + db + ".txt"); 

try 
{ 
    con.Open(); 
    cmd = new SqlCommand(PCS, con); 
    cmd.ExecuteNonQuery(); 

    using (SqlDataReader pcsrdr = cmd.ExecuteReader()) 
     using (PCSLog) 
     { 
      while (pcsrdr.Read()) 
       PCSLog.WriteLine(pcsrdr[0].ToString() + pcsrdr[1].ToString() + ","); 
     } 

    PCSLog.Close(); 
    cmd.Dispose(); 
    con.Close(); 
} 
catch (Exception ex) 
{ 
    MessageBox.Show("Can not open connection !", ex.Message); 
} 
+4

ex.Message告訴你什麼? –

+0

「GO」附近的語法錯誤我想如果它使用'ExecuteNonQuery();'它會正確讀取GO命令。 – Joe

+0

歡迎來到StackOverflow!我們想幫助你,但你應該提供必要的信息。所以請添加例外和提出它的問題。 –

回答

1

我認爲問題是你的連接字符串。試試這個:

string svrConnection = "Data Source=.\\SQLEXPRESS;Initial Catalog=" + db + ";User Id=user;Password=password;" 

或使用Windows憑據來獲取連接:

string svrConnection = "Data Source=.\\SQLEXPRESS;Initial Catalog=" + db + ";Trusted_Connection=True;" 

此外,ExecuteNonQuery不運行由GO分隔每個命令。您需要將查詢拆分爲多個部分並逐個運行。

+0

問題不在於連接字符串 - 它與腳本 - 你最後的評論是答案 –

2

還有其他問題,您的代碼:

  • 線 cmd.Dispose(); con.Close();如果發生異常,則不保證執行 。

  • 你叫PCSLog.Close之後,你有處置之後

我建議這是一個更好的選擇(不論這裏提出的其他意見)。

string svrConnection = "Server=.\\sqlexpress;Database="+db+";User ID=user;Password=password;"; 
Directory.CreateDirectory("C:\\" + db + "\\"); 
FileInfo file = new FileInfo("C:\\script.sql"); 
string PCS = file.OpenText().ReadToEnd(); 

try 
{ 
    using (SqlConnection con = new SqlConnection(svrConnection)) 
    { 
     con.Open(); 
     using (SqlCommand cmd = new SqlCommand(PCS, con)) 
     { 
      cmd.ExecuteNonQuery(); 
      using (SqlDataReader pcsrdr = cmd.ExecuteReader()) 
      using (StreamWriter PCSLog = new StreamWriter("C:\\" + db + "\\Log" + db + ".txt")) 
      { 
       while (pcsrdr.Read()) 
        PCSLog.WriteLine(pcsrdr[0].ToString() + pcsrdr[1].ToString() + ","); 
      } 

     } 
    } 
} 
catch (Exception ex) 
{ 
    MessageBox.Show("Can not open connection !", ex.Message); 
} 
+0

不需要'PCSLog.Close();'因爲它是作爲'使用(StreamWriter PCSLog = ...'行的一部分處理的。 –

+0

@ JesseC.Slicer好點..將相應地修改 –