问题使用C#和ADO.Net窗口表单从SQL Server检索数据

时间:2011-09-23 06:17:07

标签: c# sql-server

我从你那里获取了一段视频,用C#和ADO.Net从SQL Server中检索数据

http://www.youtube.com/watch?v=4kBXLv4h2ig&feature=related

我在视频中和他一样...... 我想在DataGridView中显示来自sql数据库的数据。

我收到错误

da.Fill(dg);
dg.DataSource = dg.Tables[0];

我将我的DataGridView dg命名为

完整代码

using System.Data.SqlClient;

namespace SQLconnection
 {
 public partial class Form1 : Form
{
    SqlConnection cs = new SqlConnection("Data Source=FRANK-PC\\SQLEXPRESS; Initial Catalog=Forc#; Integrated Security=TRUE");
    SqlDataAdapter da = new SqlDataAdapter();

    public Form1()
    {
        InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
        da.InsertCommand= new SqlCommand ("INSERT INTO tblContacts VALUES (@FirstName,@LastName)",    cs );
        da.InsertCommand.Parameters.Add("@FirstName", SqlDbType.VarChar).Value = txtFirstName.Text;
        da.InsertCommand.Parameters.Add("@LastName", SqlDbType.VarChar).Value = txtLastname.Text;

        cs.Open();
        da.InsertCommand.ExecuteNonQuery();
        cs.Close();
    }

    // Display data in dg
    private void button2_Click(object sender, EventArgs e)
    {
        da.SelectCommand = new SqlCommand("SELECT * FROM tblContacts", cs);
        da.Fill(dg);


        dg.DataSource = dg.Tables[0];
    }


}

}

4 个答案:

答案 0 :(得分:3)

你应该在用数据适配器填充表之前打开连接,添加:

cs.Open();

DataSet ds = new DataSet();
da.Fill(ds);
cs.Close();

dg.DataSource = ds.Tables[0];

请注意,这绝对是一个不好的做法,在SO中有关于如何处理SQLConnections的数万亿个示例,您应该使用一个使用块,以便它在使用后立即关闭并处理,并且没有连接或适配器或者数据表或sqlcommand全局到所有形式,但只在需要的时候创建它们。

实际上,您应该将所有数据访问逻辑从UI移到分离的类,业务逻辑或数据层。

修改

你应该这样做:

using(SQLConnection conn = 'connection string here')
{
    using(SQLCommand cmd = new ('sql query', conn))
    {
        //execute it blah blah
    }
}

查看此问题:Closing SqlConnection and SqlCommand c#

答案 1 :(得分:2)

隐式Fill方法打开/关闭连接,但问题在于dataGrdiView和DataTable / DataSet引用变量的名称 - dg

private void button2_Click(object sender, EventArgs e)
    {
        da.SelectCommand = new SqlCommand("SELECT * FROM tblContacts", cs);
        DataTable dt=new DataTable();
        da.Fill(dt);

        dg.DataSource = dt;
    }

答案 2 :(得分:0)

我猜是因为你没有包含你收到的异常,但你需要在使用之前打开你的SqlConnection:

private void button2_Click(object sender, EventArgs e)
{
   da.SelectCommand = new SqlCommand("SELECT * FROM tblContacts", cs);

   cs.Open();
   da.Fill(dg);
   cs.Close();

   dg.DataSource = dg.Tables[0];
}

答案 3 :(得分:0)

试试这个,但重要的是要知道抛出什么样的异常。

private void button2_Click(object sender, EventArgs e)
{
        cs.Open();
        using (SqlDataAdapter a = new SqlDataAdapter("SELECT * FROM tblContacts", cs))
        {
            DataTable t = new DataTable();
            a.Fill(t);

            dg.DataSource = t;
        }
    }