【问题标题】:Change bindingsource query to use varchar instead of nvarchar更改 bindingsource 查询以使用 varchar 而不是 nvarchar
【发布时间】:2014-06-12 16:53:32
【问题描述】:

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

【问题讨论】:

  • 我不懂 C#,但在 tsql 中进行简单的转换就可以了。

标签: c# sql tsql datagridview


【解决方案1】:
  1. 打开 YourDataSet.Designer.cs
  2. 搜索@Acct,您会找到类似SqlParameter("@Acct", global::System.Data.SqlDbType.nvachar。将nvachar 更改为varchar

【讨论】:

  • 非常感谢!这非常难以排除故障。愚蠢的 nvarchar。
猜你喜欢
  • 2013-01-27
  • 1970-01-01
  • 2014-01-24
  • 2020-03-02
  • 2015-11-30
  • 1970-01-01
  • 2021-12-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多