DataGridView显示存储过程返回数据集
运行下面的代码:
//连接数据库
SqlConnection conn = new SqlConnection( "server=.;uid=sa;pwd=5366845;database=testfile ");
SqlCommand selectCMD = new SqlCommand( "test ", conn);
selectCMD.CommandType = CommandType.StoredProcedure;
// 创建DataAdapter对象填充数据
DataSet myDS = new DataSet();
SqlDataAdapter adapter = new SqlDataAdapter(selectCMD);
adapter.Fill(myDS, "testtable ");
// 将返回的数据和DataGrid绑定显示
myDataGrid.DataSource = myDS.Tables[ "testtable "];
myDataGrid.DataMember = "testtable ";
myDS = null;
adapter = null;
selectCMD.Dispose();
conn.Dispose();
其中test是存储过程。myDataGrid是我在设计窗口中拉到窗体中的,运行后
myDataGrid.DataMember = "testtable ";出错
“无法创建字段 testtable 的子列表。”
去掉这一句,不报错但myDataGrid中什么也没有!不知如何解决,请大家帮忙,谢谢!(是winform)
[解决办法]
myDataGrid.DataSource = myDS;
这样就可以了.
或者
myDataGrid.DataSource = myDS.Tables[0]
建议去看下MSDN先.
[解决办法]
不要用DataSet 填充。
用DataTable填充
string strSql = "select * from authors "
using (OleDbConnection OleConn = new OleDbConnection(strConn))
{
OleConn.Open();
OleDbDataAdapter oleDA = new OleDbDataAdapter(strSql, OleConn);
DataTable DT = new DataTable();
oleDA.Fill(DT);
DataView.DataSource = DT;
OleConn.Close();
}
------解决方案--------------------
SqlConnection connect = new SqlConnection(decryptedText);
connect.Open();
SqlCommand cmd = new SqlCommand( "SP_SC_SE_AUTOLOOKLinebase ", connect);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add( "@InDate ", SqlDbType.DateTime);
cmd.Parameters[ "@InDate "].Value = System.DateTime.Now.ToShortDateString();
cmd.Parameters.Add( "@hours ", SqlDbType.Int);
cmd.Parameters[ "@hours "].Value = System.DateTime.Now.Hour.ToString();
cmd.Parameters.Add( "@Productline ", SqlDbType.VarChar, 12);
cmd.Parameters[ "@Productline "].Value = productline;
cmd.Parameters.Add( "@ClassType ", SqlDbType.VarChar, 12);
cmd.Parameters[ "@ClassType "].Value = ClassType;
SqlDataAdapter da = new SqlDataAdapter(cmd);
DataSet ds = new DataSet();
da.Fill(ds, "auto ");
datagridview1.DataSource = ds.Tables[0].DefaultView;
[解决办法]
你写的是winForm程序吧,winform里的datagridview数据绑定时,就不需要myDataGrid.DataBind()这一句了。
不要把myDS = null,你把内存里的数据都清了,datagridview就没有数据显示了。
还有你在数据库这端再检查一下test这个存储过程是否有数据返回。