无法填充DataSet但MySqlCommand正常工作

时间:2017-07-20 13:14:52

标签: c# mysql sql-server dataset sqlexception

所以我无法填充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);
    }
}

1 个答案:

答案 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块中,就像在辅助类中一样。