使用sqldataAdapter.Fill追加数据表
本文关键字:数据表 追加 Fill sqldataAdapter 使用 | 更新日期: 2023-09-27 18:09:50
我正在通过循环迭代,其想法是,每次它通过循环更多的行被添加到相同的数据表。我明白,通过使用填充方法,这将是这种情况。然而,在我的代码中,最后的数据表是最后一个循环的结果。下面是我的代码:
调用方法 // declare a new new datatable to hold the results of the query
DataTable dtResults = new DataTable();
foreach (OrgChartNode node in RadOrgChart1.GetAllNodes())
{
Label label1 = (Label)node.GroupItems[0].FindControl("Label1");
foreach (OrgChartRenderedField rf1 in node.GroupItems[0].RenderedFields)
{
if (rf1.Label == "ibl")
{
string[] iblWords = rf1.Text.Split(':');
string iblId = iblWords[0].Trim();
string[,] sqlParam01 =
{
{ "@document_id", iblId },
{ "@class_id", "123" }
};
dtResults = Helper.GetDataTablePrime(SQL_Default.SQL_Report, sqlParam01, dtResults);
}
}
RadGrid2.DataSource = dtResults;
RadGrid2.DataBind();
这里是GetDataTablePrime方法:
public static DataTable GetDataTablePrime(string query, string[,] sqlParameters, DataTable dtContents)
{
String connString = "Data Source=*********************************";
SqlDataAdapter adapter = new SqlDataAdapter();
using (SqlConnection conn = new SqlConnection(connString))
{
adapter.SelectCommand = new SqlCommand(query, conn);
// loop through adding parameters
for (int i = 0; i <= sqlParameters.GetUpperBound(0); i++)
{
adapter.SelectCommand.Parameters.Add(new SqlParameter(sqlParameters[i, 0], sqlParameters[i, 1]));
}
adapter.Fill(dtContents);
conn.Close();
}
return dtContents;
}
不要在每次调用GetDataTablePrime
时新建数据适配器。使用与dtResults
相同的实例
编辑这个答案是错误的。如果每次都重新启动数据适配器,它仍然可以工作:
using System;
using System.Data;
using System.Data.SqlClient;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
DataTable dt = new DataTable();
dt.Columns.Add(new DataColumn("foo"));
for (int i = 0; i < 3; i++)
{
dt = FillIt(dt);
}
for (int i = 0; i < dt.Rows.Count; i++)
{
Console.WriteLine(dt.Rows[i][0]);
}
Console.ReadKey();
}
private static DataTable FillIt(DataTable dtin)
{
SqlDataAdapter da = new SqlDataAdapter();
SqlConnection cnxn = new SqlConnection("Data Source=(LocalDB)''MSSQLLocalDB;Initial Catalog=master;Integrated Security=True");
SqlCommand cmd = new SqlCommand("SELECT 'bar' AS [foo];", cnxn);
da.SelectCommand = cmd;
da.Fill(dtin);
return dtin;
}
}
}
但是您不需要返回数据表。它是一个引用类型,所以你可以直接填充它。
using System;
using System.Data;
using System.Data.SqlClient;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
DataTable dt = new DataTable();
dt.Columns.Add(new DataColumn("foo"));
for (int i = 0; i < 3; i++)
{
FillIt(dt);
}
for (int i = 0; i < dt.Rows.Count; i++)
{
Console.WriteLine(dt.Rows[i][0]);
}
Console.ReadKey();
}
private static void FillIt(DataTable dtin)
{
SqlDataAdapter da = new SqlDataAdapter();
SqlConnection cnxn = new SqlConnection("Data Source=(LocalDB)''MSSQLLocalDB;Initial Catalog=master;Integrated Security=True");
SqlCommand cmd = new SqlCommand("SELECT 'bar' AS [foo];", cnxn);
da.SelectCommand = cmd;
da.Fill(dtin);
}
}
}
所以我看不出你的代码有什么问题。