【发布时间】:2016-09-27 03:35:39
【问题描述】:
我正在使用水晶报表根据数据库中的唯一 ID 生成一些票证。然而,我现在面临的挑战是在要打印的水晶报告中每英亩生成 2 张票。
下面我有应该发送查询并填写水晶报表查看器的代码。对于超过 9000 条独特的记录和超过 74000 英亩的土地,这是行不通的。任何人都可以帮助或帮助更好的方法来做到这一点。
此代码运行 sql server 2008 r2 内存不足:
private void button1_Click(object sender, EventArgs e)
{
try{
SqlConnection con = new SqlConnection("Data Source=localhost\\DEV;Initial Catalog=db;Integrated Security=True");
var f_id = textBox2.Text; //Unique ID Not used to generate all tickets
var n_copies = textBox1.Text; //Number of copies default 1
var t_per_acre = textBox3.Text; //Set default at 2 Tickets per acre
string sql = "Select * From dbo.CParcel";
SqlDataAdapter sda = new SqlDataAdapter(sql, con);
DataSet ds = new DataSet();
sda.Fill(ds, "CParcel");
foreach (DataRow theRow in ds.Tables["CParcel"].Rows)
{
decimal get_acreage = System.Convert.ToDecimal(theRow["ACREAGE"]);
int acr = (int)(get_acreage + 0.5m);
int t_t_per_acr = acr * System.Convert.ToInt32(t_per_acre);
int t_t_per_acr_per_copy = t_t_per_acr * System.Convert.ToInt32(n_copies);
for (int i = 1; i < t_t_per_acr_per_copy; i++)
{
sql = sql + " Union All SELECT * FROM dbo.CParcel";
}
}
SqlDataAdapter tsda = new SqlDataAdapter(sql, con);
DataSet ds2 = new DataSet();
tsda.Fill(ds2, "CParcel");
crystal.SetDataSource(ds2);
crystal.SetDatabaseLogon("sa", "password");
crystalReportViewer1.ReportSource = crystal;
}
catch (Exception ex)
{
// Print error message
MessageBox.Show(ex.Message);
}
}
【问题讨论】:
-
你有什么版本的sql server。意思是,这是 Microsoft SqlServer,不是 mysql。对吗?
-
你是正确的它的 sql server 2008 r2
-
我可以花点时间在上面。如果您来到Campaigns 聊天室怎么样,我们会收集一些信息,并在需要时为每个人更好地记录问题。
-
好的。我有几个会议。给我几分钟
-
在您不在的情况下,我只是在下面的答案中提出了一些想法。我不能走得更远。
标签: c# sql dataset sqlconnection datarow