问题描述
虚心请教专家个问题:在C#中调用执行存储过程返回存储过程的结果并想与DATAGRID绑定显示,在界面上输入三个文本框内容作为存储过程的输入参数,请问代码该如何实现啊?如何与DATAGRID绑定代码是?SqlConnectionCS=newSqlConnection("Password=123456;UserID=sa;"+"InitialCatalog=xsgl_en;"+"DataSource=(local)");SqlCommandselectCMD=newSqlCommand("test",CS);selectCMD.CommandType=CommandType.StoredProcedure;//第一个参数SqlParametermyParm1=newSqlParameter("@begindate",SqlDbType.datetime,10);myParm1.Direction=System.Data.ParameterDirection.Input;myParm1.Value=this.textbox1.text;//第二个参数SqlParametermyParm2=newSqlParameter("@stopdate",SqlDbType.datetime,10);myParm2.Direction=System.Data.ParameterDirection.Input;myParm2.Value=this.textbox2.text;//第三个参数SqlParametermyParm3=newSqlParameter("@drpcode",SqlDbType.char,10);myParm3.Direction=System.Data.ParameterDirection.Input;myParm3.Value=this.textbox3.text;selectCMD.Parameters.Add(myParm1);selectCMD.Parameters.Add(myParm2);selectCMD.Parameters.Add(myParm3);SqlDataAdaptermyCommand=newSqlDataAdapter();DataSetmyDataSet=newDataSet();myCommand.Fill(myDataSet,"Results");returnmyDataSet;
解决方案
解决方案二:
楼主已经把存储过程的部分给出了下面是绑定的部分DataGrid1.DataSource=myDataSet;DataGrid1.DataBind();
解决方案三:
调用存储过程的方法publicDataSetRunProc_ds(stringprocName,stringdbstring,SqlParameter[]prams){DataSetds=newDataSet();SqlCommandcmd=CreateCommand(procName,prams,0,dbstring);try{SqlDataAdaptermyda=newSqlDataAdapter(cmd);myda.Fill(ds);returnds;}catch{returnnull;}finally{Close();}}
解决方案四:
其实不用适配器的话不用去考虑连接是否打开,也不用时候关闭
解决方案五:
参数procName为存储过程的名字,dbstring为数据库连接字符串,prams为参数数组SqlParameter[]ddlparam=newSqlParameter[3];ddlparam[0]=CreateInParam("@begindate",SqlDbType.datetime,10);ddlparam[1]=CreateInParam("@stopdate",SqlDbType.datetime,10);ddlparam[2]=CreateInParam("@drpcode",SqlDbType.char,10);returnRunProc_ds("Circul_Employee_Result","ConnStr",ddlparam);参数数组CreateParam构造方法privateSqlParameterCreateParam(stringParamName,SqlDbTypeDbType,Int32Size,ParameterDirectionDirection,objectValue){SqlParameterparam;if(Size>0){param=newSqlParameter(ParamName,DbType,Size);}else{param=newSqlParameter(ParamName,DbType);}param.Direction=Direction;if(Value!=null){param.Value=Value;}returnparam;}
解决方案六:
綁定:GridView1.DataSource=ds.DefaultView;GridView1.DataBind();
解决方案七:
SqlParameter[]parameters={newSqlParameter("@PageIndex",SqlDbType.Int),newSqlParameter("@PageSize",SqlDbType.Int),newSqlParameter("@ConditionString",SqlDbType.VarChar,150),newSqlParameter("@Sqlstr",SqlDbType.VarChar,200),newSqlParameter("@RecordCount",SqlDbType.Int),newSqlParameter("@PageCount",SqlDbType.Int),newSqlParameter("@context2",SqlDbType.VarChar,200),};parameters[0].Value=pageIndex;parameters[1].Value=pageSize;parameters[2].Value=Wherestr;parameters[3].Value=Sqlstr;parameters[4].Direction=ParameterDirection.Output;parameters[5].Direction=ParameterDirection.Output;parameters[6].Direction=ParameterDirection.Output;DataSetdds=SqlHelper.SqlHelper.ExecuteDataset(ProcedureName,parameters,"PageTable");
解决方案八:
当数据反回来之后,是存在“DS”中么,如果是的话,那么怎么调用这些数据,如何将他们打印或是输出,按条来,我用的是.net2005的平台,刚刚看看,请指教。
解决方案九:
楼主的问题是下面需要解决的问题的一个子集,请参考我提供的方案,并进行简化。对于包含自增长的多条数据更新到数据库反填回DataTable这个问题可以这样来解决,DataColumndc=dt.Columns["id"];//这一列对应的数据库中的表字段是自增列,在内存DataTable中进行批输入更新时不能马上得到新输入的上一条记录的主键,所以建立临时唯一主键如下:dc.AutoIncrement=true;//设置该列为自增长,dc.AutoIncrementSeed=-1;//新增列的初始值。dc.AutoIncrementStep=-1;//列的值自动递增的数值。默认为1。这样你添加第一条新增数据的时候临时主键为-1,第二条为-2,...在使用DataAdapter.Update(dt);进行更新的时候,如果数据源是SqlServer那使用存储过程输出参数把自增主键输出会自动更新新增的DataRow,比如上面的-1,-2,-3等自动会更新成实际数据库中的自增主键值。这种方式具体可以看我的一片文章,http://blog.csdn.net/zhzuo/archive/2004/08/06/67037.aspx如果是Access或其他数据库就有点麻烦,回填实现如下:注册DataAdapter.RowUpdated事件。da.RowUpdated+=newOleDbRowUpdatedEventHandler(da_RowUpdated);事件处理程序,privatestaticvoidda_RowUpdated(objectsender,OleDbRowUpdatedEventArgse){if(e.Status==UpdateStatus.Continue&&e.StatementType=StatementType.Insert){OleDbConnectionconn=newOleDbConnection("连接字符串");OleDbCommandcomm=newOleDbCommand("SELECT@@IDENTITY",conn);conn.Open();e.Row["id"]=(int)comm.ExecuteScalar();//得到最新递增值更新到内存DataTable中刚更新的DataRow.e.Row.AcceptChanges();conn.Close();}}//处理程序中的每次生成conn,和comm没有必要,你可以只初始化一次,这里这么写只是为了说明过程,而且也没有必要多次打开或关闭连接。
解决方案十:
这里有更多的资料参考,http://blog.csdn.net/zhzuo/archive/2004/08/06/67016.aspxhttp://blog.csdn.net/zhzuo/archive/2004/08/06/67037.aspx