错误:System.Data.dll中发生未处理的“System.Data.SqlClient.SqlException”类型异常

时间:2018-02-17 11:28:23

标签: c# sql-server

我正在使用C#和SQL Server编写应用程序,我想连接到我的数据库并显示搜索查询的结果,我尝试了很多方法,数据集和阅读器,但同样的错误总是出现 - 请帮忙我!

错误:

  

System.Data.dll中出现未处理的“System.Data.SqlClient.SqlException”类型异常

     

附加信息:Syntaxe incorrecte vers'1012'。

以下是代码部分(med_ID是文本框的名称,dgrAffich_tab是dataGridView):

private void button1_Click(object sender, EventArgs e)
    {
        int ID;
        ID = int.Parse(med_ID.Text);
        SqlConnection conn = new SqlConnection(@"Data Source=DESKTOP-HCLRURF\SQLEXPRESS;Initial Catalog=ydb;Integrated Security=True");
        SqlCommand cmd = new SqlCommand("SELECT Quantite FROM TabRestitue WHERE Tab_medID= %" + ID + "% ORDER BY DateDePeremption ASC ");
        conn.Open();
        cmd.Connection = conn;
        DataSet dt = new DataSet();
        SqlDataAdapter sda = new SqlDataAdapter(cmd);
        sda.Fill(dt);

        dgrAffich_tab.DataSource = dt;
        conn.Close();
    }

2 个答案:

答案 0 :(得分:0)

您的Sql命令有语法错误,错误引用的1012是您的med_Id值。

SQL中的字符串必须封装在单引号(')

之间

Sql Server当前收到此字符串(%1012%附近没有引用)

#include <vector>
#include <queue>

int main(){
    auto cmp = [](std::vector<int> left, std::vector<int> right) { return(left[2]) > (right[2]);};

    std::priority_queue<std::vector<std::vector<int>>, std::vector<std::vector<int>>, decltype(cmp)> q(cmp);

    q.push({1,2,1,3});
    q.push({1,2,2,3});
    q.push({1,2,3,3});
    q.push({1,2,4,3});

    return 0;
}

有效的Sql将是

SELECT Quantite FROM TabRestitue WHERE Tab_medID= %1012% ORDER BY DateDePeremption ASC 

但是由于Sql Injection,你的方式是不安全的。推荐的方法是使用SqlParameter。另外,SqlConnection,SqlCommand和SqlDataAdapter是一次性的,所以我添加了一个用来处理它们。

SELECT Quantite FROM TabRestitue WHERE Tab_medID='%1012%' ORDER BY DateDePeremption ASC 

答案 1 :(得分:0)

为避免错误,请在T-SQL中将LIKE表达式构建为字符串,并使用强类型参数化查询。

SqlCommand cmd = new SqlCommand("SELECT Quantite FROM TabRestitue WHERE Tab_medID= '%' + CAST(@ID AS varchar(10)) + '%' ORDER BY DateDePeremption ASC;");
cmd.Parameters.Add("@ID", SqlDbType.Int).Value = ID;