我从你那里获取了一段视频,用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];
}
}
}
答案 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
}
}
答案 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;
}
}