所以我无法填充DataSet。我得到以下例外:
发生与网络相关或特定于实例的错误 建立与SQL Server的连接。
找不到服务器或无法访问服务器。验证 实例名称正确,并且SQL Server配置为允许 远程连接。
(提供商:命名管道提供商,错误:40 - 无法打开 连接到SQL Server)(Microsoft SQL Server,错误:1326)
但是使用相同的ConnectionString,我可以使用MySqlCommand类执行查询。
这在这里有效:
var con = ConfigurationManager.ConnectionStrings["conString"];
_helper = new MySqlHelper(con.ConnectionString);
string query = "SELECT Bezeichnung FROM stationen";
var reader = _helper.ExecuteReader(query);
while(reader.Read())
{
//do something
}
但是如果我使用DataSet,我在尝试填充DataSet时会收到错误
var con = ConfigurationManager.ConnectionStrings["conString"];
string query = "SELECT Bezeichnung FROM stationen";
using (SqlDataAdapter adapter = new SqlDataAdapter(query, con.ConnectionString))
{
var dataset = new U2ZFDataSet();
adapter.Fill(dataset, "stationen");
}
我做错了什么?为什么DataSet无法正常工作?
此外,这是MySqlHelpter代码:
private MySqlConnection _connection;
public MySqlHelper(string connectionString)
{
try
{
_connection = new MySqlConnection(connectionString);
_connection.Open();
}
catch (Exception ex)
{
if (_connection != null)
{
_connection.Dispose();
_connection = null;
}
throw new Exception(connectionString, ex);
}
}
public MySqlDataReader ExecuteReader(string sqlString)
{
try
{
if (_connection == null || _connection.State != System.Data.ConnectionState.Open)
throw new Exception("Connection closed");
using (MySqlCommand command = new MySqlCommand(sqlString, _connection))
{
return command.ExecuteReader();
}
}
catch (Exception ex)
{
throw new Exception(sqlString, ex);
}
}
答案 0 :(得分:1)
您应该在使用SqlDataAdapter
之前打开连接。在第一个示例中,您使用帮助程序,它正在为您执行此操作,但在第二种情况下,您不再使用帮助程序。
var con = ConfigurationManager.ConnectionStrings["conString"];
string query = "SELECT Bezeichnung FROM stationen";
con.Open();
using (SqlDataAdapter adapter = new SqlDataAdapter(query, con.ConnectionString))
{
var dataset = new U2ZFDataSet();
adapter.Fill(dataset, "stationen");
}
con.Close() -- do not forget to close it as well
请查看此示例here。
最好是将连接开头包装在try-catch
块中,就像在辅助类中一样。