0

我正在尝试使用 SQL Server 表数据填充 datagridview,但出现错误:

ExecuteReader:连接属性尚未初始化。

我该如何解决 ?

private void BlackListLoad()
{
        DataTable dt = new DataTable();
        SqlCommand cmd = new SqlCommand();
        BindingSource bs = new BindingSource();

        var table = dt;
        var connection =
            @"Data Source=someone-someone\SQLEXPRESS;Initial Catalog=test;Integrated Security=True;Connect Timeout=30;Encrypt=False;TrustServerCertificate=True;ApplicationIntent=ReadWrite;MultiSubnetFailover=False";

        using (var con = new SqlConnection { ConnectionString = connection })
        {
            if (con.State == ConnectionState.Closed)
            {
                con.Open();
            }

            try
            {
                cmd.CommandText = @"SELECT * FROM [dbo].[Blacklist1]";
                table.Load(cmd.ExecuteReader());

                bs.DataSource = table;
                ListGrid.ReadOnly = true;
                ListGrid.DataSource = bs;
            }
            catch (SqlException ex)
            {
                MessageBox.Show(ex.Message + " sql query error.");
            }
        }
}
4

2 回答 2

2

你还没有给你的 SqlCommand 一个连接!正如它所说,你需要这样做。您可以通过以下方式解决此问题:

cmd.Connection = con;就在你执行阅读器之前。

阅读此处了解更多信息:https ://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlcommand.connection(v=vs.110).aspx

看起来您还没有打开连接,可以通过以下方式修复:

con.Open();

使用新的连接对象,您无需检查它是否打开,因为它不会打开。

于 2017-12-14T14:06:29.660 回答
1

试试这个方法。

using System;
using System.Data;
using System.Windows.Forms;
using System.Data.SqlClient;

namespace WindowsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            string connectionString = "Data Source=.;Initial Catalog=pubs;Integrated Security=True";
            string sql = "SELECT * FROM Authors";
            SqlConnection connection = new SqlConnection(connectionString);
            SqlDataAdapter dataadapter = new SqlDataAdapter(sql, connection);
            DataSet ds = new DataSet();
            connection.Open();
            dataadapter.Fill(ds, "Authors_table");
            connection.Close();
            dataGridView1.DataSource = ds;
            dataGridView1.DataMember = "Authors_table";
        }
    }
}
于 2017-12-14T21:49:02.877 回答