应用程序在我启动后不会直接崩溃

时间:2017-10-20 00:09:37

标签: c# sql sql-server ado.net

我遇到了问题,这是我的代码:

DataTable DT1 = new DataTable();

public static DataTable DATASETRETURN(string queryString)
{
    DataSet DS = new DataSet();

    SqlDataAdapter adapter = new SqlDataAdapter
            {
                SelectCommand = new SqlCommand(queryString, CLSERVICES.CON)
            };
    adapter.Fill(DS, "TABLE");

    return DS.Tables["TABLE"];
}

private void FE_C_HISTORIQUE_Load(object sender, EventArgs e)
{
    E_HISTORIQUE_LV_HISTORIQUE_04.Items.Clear();
    string req = "select H.NHistorique, P.Intitulle, H.QuantiteVendu, P.PrixVente,"+
                 "(P.PrixVente * H.QuantiteVendu) as PQ, H.TypeAction, H.DateAction " +
                 "from HISTORIQUE as H, PRODUIT as P" +
                 "where (P.NProduit = H.NProduit)"+
                 "order by H.NHistorique desc";
    DT1 = DATASETRETURN(req);

    for (int i = 0; i < DT1.Rows.Count; i++)
    {
        ListViewItem LV = new ListViewItem(DT2.Rows[i][0].ToString());
        LV.SubItems.Add(DT1.Rows[i][1].ToString());
        LV.SubItems.Add(DT1.Rows[i][2].ToString());
        LV.SubItems.Add(DT1.Rows[i][3].ToString());
        LV.SubItems.Add(DT1.Rows[i][4].ToString());
        LV.SubItems.Add(DT1.Rows[i][5].ToString());
        LV.SubItems.Add(DT1.Rows[i][6].ToString());

        E_HISTORIQUE_LV_HISTORIQUE_04.Items.Add(LV);
    }
} 

运行应用后,我在方法DATASETRETURN中遇到错误

adapter.Fill(DS, "TABLE");

错误是:

  

System.Data.SqlClient.SqlException   “\”P \“不是可识别的表提示选项。如果它是作为表值函数或CHANGETABLE函数的参数,请确保将数据库兼容性模式设置为90。”

有没有解决方案?

1 个答案:

答案 0 :(得分:1)

由“P_where”和“H.NProduit)_order”之间缺少空格引起的问题

指定多行查询时我更喜欢:

string req = @"
  select H.NHistorique,P.Intitulle,H.QuantiteVendu,P.PrixVente,
   (P.PrixVente*H.QuantiteVendu)as PQ,H.TypeAction,H.DateAction
  from HISTORIQUE as H, PRODUIT as P
  where(P.NProduit = H.NProduit)
  order by H.NHistorique  desc
";
通过这种方式,您可以减少在查询中遗漏新行的机会。