Can';t使SQL Server连接为C#
我正在尝试连接到本地计算机上的SQL Server,对其运行SQL命令并记录结果。代码始终无法连接到服务器 我不太明白我做错了什么。我搜索的所有内容要么不适用于此方法,要么似乎与我正在做的匹配。我认为代码中还有其他问题,但我甚至无法通过SQL连接来测试其余部分。这是我的密码:Can';t使SQL Server连接为C#,c#,sql,sql-server,C#,Sql,Sql Server,我正在尝试连接到本地计算机上的SQL Server,对其运行SQL命令并记录结果。代码始终无法连接到服务器 我不太明白我做错了什么。我搜索的所有内容要么不适用于此方法,要么似乎与我正在做的匹配。我认为代码中还有其他问题,但我甚至无法通过SQL连接来测试其余部分。这是我的密码: string svrConnection = "Server=.\\sqlexpress;Database="+db+";User ID=user;Password=password;"; SqlConnection c
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);
}
我认为问题在于你的连接字符串。试试这个:
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;"
此外,ExecuteOnQuery不会运行每个由GO分隔的命令。您需要将查询拆分为多个部分,并分别运行每个部分。我认为问题在于您的连接字符串。试试这个:
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;"
此外,ExecuteOnQuery不会运行每个由GO分隔的命令。您需要将查询拆分为多个部分,并分别运行每个部分。您的代码还存在其他问题:
- 台词 cmd.Dispose(); con.Close(); 不保证在发生异常时执行
- 处理完后,可以调用
PCSLog.Close
您的代码还存在其他问题:
- 台词 cmd.Dispose(); con.Close(); 不保证在发生异常时执行
- 处理完后,可以调用
PCSLog.Close
ex.Message告诉你什么?在“GO”附近有不正确的语法,我想如果它使用的是'ExecuteOnQuery();'它将正确读取GO命令。然后我认为您成功连接到数据库,并且您尝试执行的脚本有问题。不过,还有另一个问题-您调用
ExecuteNonQuery()
,然后调用ExecuteReader
-这是不正确的-ExecuteNonQuery()
用于不返回结果集的sql。仅供参考,您可能希望尝试使用而不是执行”;Initial Catalog=“+db+”;“…”
它将自动执行正确的转义,以防用户执行一些愚蠢的操作,例如放置数据库名称中的代码>。以类似的方式,您可以使用来可靠地构建您的“C:\\”+db+“\\Log”+db+“.txt”
。例如,Message告诉您什么?如果使用“ExecuteOnQuery();”的话,“GO”附近的语法不正确它将正确读取GO命令。然后我认为您成功连接到数据库,并且您尝试执行的脚本有问题。不过,还有另一个问题-您调用ExecuteNonQuery()
,然后调用ExecuteReader
-这是不正确的-ExecuteNonQuery()
用于不返回结果集的sql。仅供参考,您可能希望尝试使用而不是执行”;Initial Catalog=“+db+”;“…”
它将自动执行正确的转义,以防用户执行一些愚蠢的操作,例如放置数据库名称中的代码>。以类似的方式,您可以使用来可靠地构建您的“C:\\”+db+“\\Log”+db+“.txt”
。不需要PCSLog.Close()代码>作为使用(StreamWriter PCSLog=…
行的一部分处理。不需要PCSLog.Close();
作为使用的一部分处理(StreamWriter PCSLog=…
line。问题不在于连接字符串-而在于脚本-您的最后一条评论是答案问题不在于连接字符串-而在于脚本-您的最后一条评论是答案