我在程序里写了一个存储过程,并且把存储过程的代码存入一个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仍然为空
调试欢乐多
纠正:string myProc = "CREATE PROCEDURE [dbo].[A1] as select * from TEST GO"在SQLserver执行这个过程没问题
創建儲存過程
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語句方式會占用更大的網羅流量.
2.
SqlDataAdapter da = new SqlDataAdapter(myProc,conn);
DataTable dt = new DataTable();
da.Fill(dt);
3.建议用 DATASET 返回.结果一般从倒数数起.如: DATASET.TABLES(DATASET.TABLES.COUNT-1)
'函数: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