我使用以下代码从数据行中提取值并使用该值从另一个表中获取正确的结果。我遇到的问题是datarow的值是一个显然是nvarchar的字符串,这导致sql出现问题。它应该是一个varchar,它在表中是什么,当在sql中运行时它非常快,而不是在我的应用程序中令人讨厌的慢和超时。我知道它的nvarchar基于分析仪显示N'在价值之前。
如何更改此项以确保传递给查询时masteraccount的值是varchar?
System.Data.DataRowView SelectedRowView;
waterDataSet.WaterAccountsRow SelectedRow;
SelectedRowView = (System.Data.DataRowView)waterAccountsBindingSource.Current;
SelectedRow = (waterDataSet.WaterAccountsRow)SelectedRowView.Row;
frmWater WaterForm = new frmWater(this);
WaterForm.LoadWaterAcct(SelectedRow.MASTER_ACCOUNT, null);
WaterForm.Show();
其余代码在这里:
public void LoadWaterAcct(String Acct, String tableName)
{
arTableAdapter1.FillByWaterAcct(waterDataSet1.AR, castAcct);
demTableAdapter1.FillByMAcct(waterDataSet1.DEM, Acct);
}
FillByWaterAcct创建的查询如下:
exec sp_executesql
N'SELECT MASTER_ACCOUNT, ACCT_KEY, INST_KEY, CUST_KEY, WATER_ACCOUNT, BILL_CYCLE, DUE_DATE, PRIM_TYPE, WATER_CHG, WATER_SVC_CHG, SEWER_CHG, SEWER_SVC_CHG, PENALTY_AMT, LIEN_FEE, INVOICE_AMT, INDUSTRY_CHG, FIRE_CHG, STORM_WATER_CHG, MISC_AMT, CREDIT_AMT, TOTAL_AMT, DEBT_COL, DEBT_COL_STAGE, ACCT_BILL_STAT, DEBT_COL_DATE, PLAN_AMT, JUDGEMENT_DATE
FROM AR
WHERE (MASTER_ACCOUNT = @Acct)
ORDER BY BILL_CYCLE',N'@Acct nvarchar(20)',@Acct=N'000764658'
需要改变的是
@Acct nvarchar(20) to @Acct varchar(20)
我该怎么做?查询在执行时由c#创建。
答案 0 :(得分:1)