كيف يمكنني قراءة جداول متعددة في مجموعة بيانات؟
سؤال
لدي إجراء مخزن يقوم بإرجاع جداول متعددة.كيف يمكنني تنفيذ وقراءة كلا الجدولين؟
لدي شيء مثل هذا:
SqlConnection conn = new SqlConnection(CONNECTION_STRING);
SqlCommand cmd = new SqlCommand("sp_mult_tables",conn);
cmd.CommandType = CommandType.StoredProcedure);
IDataReader rdr = cmd.ExecuteReader();
لست متأكدًا من كيفية قراءتها... ما هي أفضل طريقة للتعامل مع هذا النوع من الاستعلامات، أعتقد أنني يجب أن أقرأ البيانات في DataSet؟كيف هي أفضل طريقة للقيام بذلك؟
شكرًا.
المحلول
using (SqlConnection conn = new SqlConnection(connection))
{
SqlDataAdapter adapter = new SqlDataAdapter();
adapter.SelectCommand = new SqlCommand(query, conn);
adapter.Fill(dataset);
return dataset;
}
نصائح أخرى
إذا كنت ترغب في قراءة النتائج إلى DataSet، كنت أفضل أن تكون باستخدام DataAdapter و.
ولكن مع DataReader، أعاد الأول من خلال مجموعة النتائج الأولى، ثم استدعاء NextResult للتقدم إلى مجموعة النتائج الثاني.
والقارئ سوف تتعامل مع مجموعات النتائج بالترتيب عاد. عندما يتم معالجة مجموعة النتائج الأولى، والدعوة rdr.NextResult () لتعيين لاحد المقبل
وعلما أيضا بأن محول الجدول وقراءة تلقائيا كافة مجموعات النتائج في جداول في مجموعة بيانات على التعبئة، إلا أن datatables يكون مصنف ويسمى Table1، Table2، وما إلى ذلك.
* قراءة جميع أسماء أوراق Excel وإضافة أوراق متعددة إلى مجموعة بيانات واحدة مع أسماء الجداول كأسماء أوراق.*
'المتغيرات العالمية
خافت excelSheetNames كسلسلة ()
Dim DtSet As System.Data.DataSet = New DataSet()
الخاص الفرعي btnLoadData_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) يعالج btnLoadData.Click
تعتيم MyConnection باسم OleDbConnection
خافت من System.Data.OleDb.OleDbDataAdapter
خافت ط كعدد صحيح
MyConnection = New System.Data.OleDb.OleDbConnection("provider=Microsoft.Jet.OLEDB.4.0;
مصدر البيانات=SStatus.xls;الخصائص الموسعة = ""Excel 8.0;HDR=NO;IMEX=1"" ")
'تحصل الطريقة التالية على جميع أسماء أوراق Excel في المصفوفة الشاملة excelSheetNames
GetExcelSheetNames("SStatus.xls")
For Each str As String In excelSheetNames
da = New OleDbDataAdapter("select * from [" & str & "]", MyConnection)
da.Fill(DtSet, excelSheetNames(i))
i += 1
Next
DataGridView1.DataSource = DtSet.Tables(0)
End Sub
الوظيفة العامة GetExcelSheetNames (ByVal excelFileName كسلسلة)
Dim con As OleDbConnection = Nothing
Dim dt As DataTable = Nothing
Dim conStr As String = ("Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source=") + excelFileName & ";Extended Properties=Excel 8.0;"
con = New OleDbConnection(conStr)
con.Open()
dt = con.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, Nothing)
excelSheetNames = New String(dt.Rows.Count - 1) {}
Dim i As Integer = 0
For Each row As DataRow In dt.Rows
excelSheetNames(i) = row("TABLE_NAME").ToString()
i += 1
Next
End Function