【问题标题】:Reader always returns NULL阅读器总是返回 NULL
【发布时间】:2016-01-01 10:43:45
【问题描述】:

我是 C# 新手。我想编写一个可以轻松连接到 SQL Server 数据库的应用程序。我有一个单独的DBConnection 类,我想从任何形式调用这个类。

问题是我的“阅读器”总是返回Null

class DBconnection
{
    private SqlConnection conn;
    private SqlCommand cmd;
    private SqlDataReader rdr;
    private DataTable dt;

    private SqlConnection MyConnection
    {
        get
        {
            if (this.conn == null)
            {
                this.conn = new SqlConnection(DrivingSchool.Properties.Settings.Default.cdsConnectionString);
            }
            return conn;
        }
    }

    private SqlCommand MyCommand
    { 
        get
        {
            if (cmd == null)
            {
                cmd = new SqlCommand();
                MyCommand.Connection = conn;
            }

            return cmd;
        }
    }

    public DataTable RunQuery(string query)
    {
        dt = new DataTable();

        MyCommand.CommandText = query;
        MyCommand.Connection = conn;
        MyConnection.Open();

        rdr = MyCommand.ExecuteReader(CommandBehavior.CloseConnection);

        if(rdr.HasRows)
        {
            dt.Load(rdr);
        }

        MyConnection.Close();

        return dt;
    }
}

【问题讨论】:

  • 在我看来,在考虑创建连接和 SqlCommand 时,您的代码过于复杂。
  • 连接需要在使用SqlDataReader期间保持打开。使用这个单独的 DbConnection 类只会使使用 ADO.NET 变得不必要更加复杂,并引入错误 - 在这种情况下不是一个好主意

标签: sql-server c#-4.0


【解决方案1】:

在我看来,在考虑创建连接和 SqlCommand 时,您的代码过于复杂。

要填充 DataTable,您应该使用 SqlDataAdapter(或适合您使用的任何数据库的 DataAdapter),如下所示:

static public DataTable GetDataTableFromQuery(string queryString)
{
    DataTable dt = null;
    string connStr = DrivingSchool.Properties.Settings.Default.cdsConnectionString;

    using (SqlDataAdapter da = new SqlDataAdapter(queryString, connStr))
    {
        da.Fill(dt);
    }

    return dt;
}

【讨论】:

    猜你喜欢
    • 2011-10-23
    • 2017-06-08
    • 1970-01-01
    • 2017-06-11
    • 2014-03-04
    • 2016-11-02
    • 2014-05-06
    • 2012-06-05
    • 2014-05-30
    相关资源
    最近更新 更多