我有一个用c#编写的简单程序。它的主要目的是进行数据存档。下面是程序外观的快照。
如图所示,无论何时单击按钮,消息都将显示在程序左侧的大文本框中。现在,我正在实现另一个名为Row Count的按钮。此功能的目的是当我单击该按钮时,它将执行我的一个SQL脚本,并将表格中的计数数量显示在文本框中。
在SQL脚本中包含多个表的行计数查询,而不仅仅是一个行计数查询。以下是它的片段:
SELECT COUNT(*) AS [PromotionEventRows] FROM PromotionEvent (NOLOCK)
select top 1 EventCode as [PE - PE Code], LastChangeDate FROM PromotionEvent (NOLOCK) ORDER BY LastChangeDate DESC
SELECT COUNT(*) AS [PromotionBenefitRows] FROM PromotionBenefit (NOLOCK)
select top 1 PromotionBenefitCode as [PB - PB Code], LastChangeDate FROM PromotionBenefit (NOLOCK) ORDER BY LastChangeDate DESC
SELECT COUNT(*) AS [CardTypeBenefitRows] FROM CardTypeBenefit (NOLOCK)
select top 1 CardTypeBenefitID, LastChangeDate FROM CardTypeBenefit (NOLOCK) ORDER BY LastChangeDate DESC
我知道有一个方法ExecuteScalar来实现这个目的,但这里的问题是我不想在我的c#代码中编写SQl查询。相反,我希望我的程序读取该脚本并在程序的文本显示中显示计数。可以想象它在SQL服务器中获取结果,但结果显示在我的程序文本框中。任何建议都会有所帮助。
这也是我的C#代码的一部分:
try
{
using (SqlConnection con = new SqlConnection(constr))
{
con.Open();
FileInfo file = new FileInfo("Directory of that SQL script");
string script = file.OpenText().ReadToEnd();
Server server = new Server(new ServerConnection(con));
server.ConnectionContext.ExecuteNonQuery(script);
Display("Whatever message display on textbox");
con.Close();
}
}
catch (Exception ex)
{
textBox1.AppendText(string.Format("{0}", Environment.NewLine));
textBox1.AppendText(string.Format("{0} MainPage_Load() exception - {1}{2}", _strThisAppName, ex.Message, Environment.NewLine));
Display(ex.Message + "message");
textBox1.AppendText(string.Format("{0}", Environment.NewLine));
Debug.WriteLine(string.Format("{0} MainPage_Load() exception - {1}", _strThisAppName, ex.Message));
}
答案 0 :(得分:0)
在SQL中编写存储过程并将计数返回到前端。 可以从下面的代码中调用SP,其中Execute_StoredPro是我的SP名称,runTests是我的连接
SqlCommand spcmd = new SqlCommand("Execute_StoredPro", runTests);
spcmd.CommandTimeout = 0;
spcmd.CommandType = CommandType.StoredProcedure;
spcmd.ExecuteNonQuery();