无法建立SQL Server连接C#

时间:2016-01-20 16:01:38

标签: c# sql sql-server

我尝试连接到本地计算机上的SQL Server,对其运行SQL命令并记录结果。代码与服务器的连接失败。

我无法理解我做错了什么。我搜索过的所有内容要么不适用于此方法,要么与我正在做的事情相匹配。我认为我在代码中也有其他问题,但我甚至无法通过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);
}

2 个答案:

答案 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);
}  

答案 1 :(得分: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分隔的每个命令。您需要将查询拆分为多个部分并单独运行。