我正在使用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();
}
答案 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;