更改bindingsource查询以使用varchar而不是nvarchar

时间:2014-06-12 16:53:33

标签: c# sql tsql datagridview

我使用以下代码从数据行中提取值并使用该值从另一个表中获取正确的结果。我遇到的问题是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#创建。

1 个答案:

答案 0 :(得分:1)

  1. 打开YourDataSet.Designer.cs
  2. 搜索@Acct,你会发现类似SqlParameter(“@ Acct”,global :: System.Data.SqlDbType.nvachar。将nvachar更改为varchar
相关问题