我有一个SQL类,可以读取和写入远程SQL Server数据库的数据。当我启动应用程序时,它连接并读取2个表但是一旦它尝试读取第3个表,应用程序就会抛出异常:
发生与网络相关的实例或特定于实例的错误 建立与SQL Server的连接。找不到服务器或 无法访问。验证实例名称是否正确 SQL Server配置为允许远程连接。
我的连接字符串如下所示:
server=My-PC\SQLEXPRESS;database=DB_main; User Id=**;password=*****; Integrated Security=SSPI;
读取前两个表时连接字符串正常工作,但在读取第三个表时崩溃。
我的SQL类包含一个函数,用于检索保存到文本文件的连接字符串。然后对于每个表我都有一个连接到数据库并读取所有行的函数,并将其作为强类型List<T>
示例:
public List<User> ReadAll_Users()
{
string Table_Name = "Table_Users";
sqlCommand2 = new SqlCommand();
List<User> ListUsers = new List<User>();
try
{
string path = GetPathOfDataBAse2();
sqlconnection2 = new SqlConnection(path);
sqlCommand2.Connection = sqlconnection2;
sqlCommand2.CommandText = "Select * from " + Table_Name;
sqlconnection2.Open();
SqlDataReader reader = sqlCommand2.ExecuteReader();
while (reader.Read())
{
User model = new User();
model.Name = Convert.ToString(reader["Name"]).ToString();
model.Surname = Convert.ToString(reader["Surname"]).ToString();
model.Created_Date = Convert.ToString(reader["Created_Date"]).ToString();
model.Password = Convert.ToString(reader["Password"]).ToString();
model.Admin = Convert.ToString(reader["Admin"]).ToString();
ListUsers.Add(User);
}
sqlconnection2.Close();
return (ListUsers);
}
catch (Exception ex)
{
ErrorReport msg = new ErrorReport("SQLconnector, ReadAll_Users()", ex.ToString());
msg.ShowDialog();
sqlconnection2.Close();
return (null);
}
}
所有功能都采用相同的技术。
我可以看一下解决这个问题的方法吗?
答案 0 :(得分:0)
我认为你需要关闭你的读者。
答案 1 :(得分:0)
我想你应该在你的代码中处理所有与SQL相关的对象(现在你可能在调用方法后有非处理的SqlCommand和SqlDataReader)。您可以在SqlConnection,SqlCommand,SqlDataReader对象上显式调用Dispose()(最好在finally块中执行它,而不是在try和catch块中编写代码两次)。
但是使用“using”语句会更好。它的工作方式相同(如在finally块中处理对象),但您需要更少的输入。例如,代码可能如下所示:
public List<User> ReadAll_Users_st()
{
string Table_Name = "Table_Users";
string path = GetPathOfDataBAse2();
List<User> ListUsers = new List<User>();
using (SqlConnection sqlconnection2 = new SqlConnection(path))
using (SqlCommand sqlCommand2 = sqlconnection2.CreateCommand())
{
try
{
sqlCommand2.CommandText = "Select * from " + Table_Name;
sqlconnection2.Open();
using (SqlDataReader reader = sqlCommand2.ExecuteReader())
{
while (reader.Read())
{
User model = new User();
model.Name = Convert.ToString(reader["Name"]).ToString();
model.Surname = Convert.ToString(reader["Surname"]).ToString();
model.Created_Date = Convert.ToString(reader["Created_Date"]).ToString();
model.Password = Convert.ToString(reader["Password"]).ToString();
model.Admin = Convert.ToString(reader["Admin"]).ToString();
ListUsers.Add(model);
}
}
sqlconnection2.Close();
return (ListUsers);
}
catch (Exception ex)
{
ErrorReport msg = new ErrorReport("SQLconnector, ReadAll_Users()", ex.ToString());
msg.ShowDialog();
sqlconnection2.Close();
return (null);
}
}
}
答案 2 :(得分:0)
感谢您的评论,我应该提供比我更多的信息,我道歉。我发现了错误。当我启动项目时,我使用SQL compact我忽略了一些关于SQL服务器更改的代码。错误发生在
行`sqlconnection2 = new SqlConnection(path);`
在某些时候我应该改变每一个
`sqlconnection2 = new SqlConnection("Data Source = " + path + ";");`
到
`sqlconnection2 = new SqlConnection(path);`