将具有不同SQL Server存储过程的相同数据集填充到数据表

时间:2016-05-12 20:07:15

标签: c# .net sql-server vb.net

我想将来自不同SQL Server存储过程(每个返回1个结果集)的数据集填充到数据集中自己的数据表中。

我真的不想将SQL作为文本" exec sp1传递; exec sp2" ...我想使用下面的cmd.CommandType = CommandType.StoredProcedure方法,这样做的最佳方法是什么?

清除SqlDataAdapter并再次调用它以使用sp2结果集加载它?它会消灭表(0)吗?我希望它填写表(1)

cnn.Open()
cmdSQL1 = New SqlCommand
cmdSQL1.Connection = cnn
cmdSQL1.CommandType = CommandType.StoredProcedure
cmdSQL1.CommandText = ("sp1")
cmdSQL2 = New SqlCommand
cmdSQL2.Connection = cnn
cmdSQL2.CommandType = CommandType.StoredProcedure
cmdSQL2.CommandText = ("sp2")

Dim da As New SqlDataAdapter(cmdSQL1)
da.Fill(ds) 

编辑

da.Dispose()
da.SelectCommand = cmdSQL2
da.Fill(ds, "tab2")

dt = ds.Tables(0)
dt2 = ds.Tables(1)

1 个答案:

答案 0 :(得分:0)

保持简单。看看这个例子吧。

Dim ds As New Data.DataSet() ' Dataset to fill
Using cnn As New Data.SqlClient.SqlConnection("my connection string")
    Dim cmd As New Data.SqlClient.SqlCommand("sp1", cnn) ' The only command
    cmd.CommandType = Data.CommandType.StoredProcedure
    cmd.Parameters.Add(New Data.SqlClient.SqlParameter("@id", Data.DbType.Int32)).Value = 1234 ' parameters if we need some
    Dim dt As New Data.DataTable() 
    cnn.Open()
    dt.Load(cmd.ExecuteReader()) ' load dt from reader. DataAdapter in fact does the same
    ds.Tables.Add(dt) ' 0th tbl added
    cmd.CommandText = "sp2" ' prepare 2nd SP
    cmd.Parameters.Clear() ' no comment
    dt = New Data.DataTable() ' recreate dt
    dt.Load(cmd.ExecuteReader())
    ds.Tables.Add(dt) ' 1st tbl added
    cnn.Close() ' clean up your place
    cmd.Dispose() ' clean up your place
End Using