首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

DataGridView显示存储过程返回数据集,该如何处理

2012-01-18 
DataGridView显示存储过程返回数据集运行下面的代码://连接数据库SqlConnectionconnnewSqlConnection( s

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这个存储过程是否有数据返回。

热点排行