我在执行选择查询时收到此异常: -
System.Data.dll中发生了'System.Data.SqlClient.SqlException'类型的异常,但未在用户代码中处理。无法绑定多部分标识符“sd.MED_ID”。
我的代码是
window.scroll({ top: 400, left: 0, behavior: 'smooth' });
答案 0 :(得分:0)
以下是造成此错误的原因:
from SYM_DETAIL sd"+
"inner join MEDICINE
您在sd
和inner
之间缺少空格,因此别名变为sdinner
。
另一个更严重的问题是您要连接字符串以创建SQL语句。这是一种安全隐患,因为它为SQL injection攻击敞开了大门
要删除在查询中使用参数所需的威胁,必须使用SqlCommand
实例。
另外,您应该注意SqlConnection
,SqlCommand
和SqlDataAdapter
都实现了IDisposable
接口,因此您应该将它们包装在using
语句中。
我不知道你的代码中的connection
类是什么,但是从我看到的内容中包含SqlConnection
。我建议不要使用SqlConnection
,因为SqlConnection
应该关闭并处理以返回连接池。
以下是我建议编写此代码的方法:
// a class member
private string connectionString;
// In your constructor
connectionString = ConfigurationManager.ConnectionStrings["connectionString"].ConnectionString;
private void set_data_Click(object sender, EventArgs e)
{
var ds = new DataSet();
var query = "Select SY_DID, S_ID as 'SYMPTOM NO', SD_ID as 'DISK NO', m.med_name as 'MED NAME', SRO, PNR, SYM as '% SYM', DMD" +
" from SYM_DETAIL sd" +
" inner join MEDICINE m on sd.MED_ID=m.med_Id" +
" where sd.S_ID = @S_ID" +
" and sd.SD_ID= @SD_ID";
using(var con = new SqlConnection(connectionString)
{
using(var cmd = new SqlCommand(query, con))
{
cmd.Parameters.Add("@S_ID", SqlDbType.VarChar).Value = txtbxsymid_update.Text;
cmd.Parameters.Add("@SD_ID", SqlDbType.VarChar).Value = txtbxdiskid_update.Text;
using(var adapter = new SqlDataAdapter(cmd))
{
adapter.Fill(ds, "SYM_DETAIL");
}
}
}
dataGridView1.DataSource = ds.Tables[0];
}