我在程序里写了一个存储过程,并且把存储过程的代码存入一个string里比如 string myProc = "REATE PROCEDURE [dbo].[A1] as select * from TEST GO"请问怎样能够将他的结果集存入一个datatable里?谢谢!我尝试用:SqlDataAdapter da = new SqlDataAdapter(myProc,conn);
DataTable dt = new DataTable();
da.Fill(dt);不成功,dt仍然为空

解决方案 »

  1.   

    上面打错
    纠正:string myProc = "CREATE PROCEDURE [dbo].[A1] as select * from TEST GO"在SQLserver执行这个过程没问题
      

  2.   

    26,調用儲存過程
    創建儲存過程
    create procedure elogin_ws
    as
    select 中文姓名,nt from elogin1
    go
    //程序代碼
    private void Page_Load(object sender, System.EventArgs e)
              {
                   // 在這裡放置使用者程式碼以初始化網頁
                   //連接字符串
                   string connstr="server=10.64.2.80;user id=ieb;pwd=ieb;database=cust";
    //               string connstr="server=10.64.2.80;User id=ieb;Pwd=ieb;DataBase=cust";
                   //創建Connection對象
                   SqlConnection myconn=new SqlConnection(connstr);
                   //創建Command對象並和Connection對象關聯
                   SqlCommand mycommand=new SqlCommand();
                   mycommand.Connection=myconn;
                   //指定要執行儲存過程名稱
                   mycommand.CommandText="elogin_ws";
                   //使用要執行的是儲存過程
                   mycommand.CommandType=CommandType.StoredProcedure;               //創建DataAdapter對象並填充數據
                   DataSet myds=new DataSet();
                   SqlDataAdapter adapter=new SqlDataAdapter(mycommand);
                   adapter.Fill(myds,"elogin1");
                   //將返回的數據和DataGrid綁定顯示
                   this.DataGrid1.DataSource=myds.Tables["elogin1"];
                   this.DataGrid1.DataBind();
              }
    主要看下面的代碼,CommandText屬性在這裡沒有指定要執行的SQL語句,而是指定了儲存過程名稱,怎麼區別CommandText屬性值是SQL語句或者儲存過程呢,CommandType屬性用來說明CommandText屬性值類型,默認值是CommandType.Text.
    //儲存過程
    mycommand.CommandText="elogin_ws";
    //使用要執行的是儲存過程
    mycommand.CommandType=CommandType.StoredProcedure;
    //執行SQL命令的代碼
    //SQL語句
    mycommand.CommandText=”select 中文姓名,nt from elogin1”;
    //指定執行類型
    myCommand.CommandType=CommandType.Text.
    儲存過程相比SQL語句方式有以下的好處:
    1,可以接受輸入函數,並以輸出參數的形式將多個值返回至調用過程或批處理
    2,可以向調用過程或批處理返回狀態值,以表明成功或失敗(以及失敗的原因)
    3,允許模塊化程序設計.只需創建儲存過程一次並將其儲存在數據庫中,以後即可在程序中調用改過程任意次.儲存過程可由在數據庫編程方面有專長的人員創建,並可獨立于程序源代碼而單獨修改.
    4,減少網羅流量,儲存過程的主體儲存在數據庫服務器端,程序中調用時只需要傳遞儲存過程的名稱即可.SQL語句需要將語句主體傳遞到數據庫服務器端,在數據庫與程序執行端分別是兩台主機的情況下,SQL語句方式會占用更大的網羅流量.
      

  3.   

    1.先执行 myProc 来建立过程.
    2. 
    SqlDataAdapter da = new SqlDataAdapter(myProc,conn);
    DataTable dt = new DataTable();
    da.Fill(dt);
    3.建议用 DATASET 返回.结果一般从倒数数起.如: DATASET.TABLES(DATASET.TABLES.COUNT-1)
      

  4.   

    不好意思 怎么在第一步中用myProc来建立过程?
      

  5.   

    '*********************************************************
        '函数:ExeSqlCmd
        '范围:Public
        '作用:执行一条 SQL 语句.
        '参数:
        '     SqlStr:要执行的 SQL 语句. 
        '返回值:
        '    成功:返回 0
        '    失败:返回 错误代号
        '*********************************************************
        Public Function ExeSqlCmd(ByVal SqlStr As String) As Integer        Dim SqlCmd As New SqlClient.SqlCommand
            Dim ErrNumber As Integer = 0        Call OpenSqlConn()
            Try
                If M_SqlBeginTrans Then SqlCmd.Transaction = M_SqlTrans
                SqlCmd.CommandType = CommandType.Text
                SqlCmd.CommandText = SqlStr
                SqlCmd.CommandTimeout = 60
                SqlCmd.Connection = M_SqlConn
                SqlCmd.ExecuteNonQuery()
                ErrNumber = 0
            Catch
                ErrNumber = Err.Number
            End Try        Err.Clear()
            Call CloseSqlConn()
            SqlCmd.Dispose()
            ExeSqlCmd = ErrNumber    End Function