【问题标题】:Is my logic correct? I'm trying to do a simple search from a database我的逻辑正确吗?我正在尝试从数据库中进行简单搜索
【发布时间】:2014-01-21 16:31:21
【问题描述】:

这是我的搜索功能代码

string strRFID = "SELECT patientID FROM RFID WHERE rfidentification=@rfidSearch";
SqlCommand cmdRFID = new SqlCommand(strRFID, connection);
cmdRFID.Parameters.AddWithValue("@rfidSearch", txtRFID.Text);


string strPatient = "SELECT * FROM PATIENT WHERE patientID=" + "'" + strRFID + "'";
SqlCommand cmdPatient = new SqlCommand(strPatient, connection);

connection.Open();
SqlDataReader readRFID = cmdRFID.ExecuteReader();
readRFID.Close();

SqlDataReader readPatient = cmdPatient.ExecuteReader();

if (readPatient.Read())
{
    txtFirstName.Text = readPatient["pFirstName"].ToString();
}
else
{
    MessageBox.Show("No record found");
}

readPatient.Close();
connection.Close();

我不断收到此错误消息:“将 varchar 值 'SELECT patientID FROM RFID WHERE rfidentification=@rfidSearch' 转换为数据类型 int 时转换失败。”卡了几个小时,我想不通

【问题讨论】:

    标签: c# sql winforms visual-studio-2010 ado.net


    【解决方案1】:

    问题是您将子查询附加为字符串值。去掉单引号

    string strPatient = "SELECT * FROM PATIENT WHERE patientID= (" +  strRFID+")" ;
    

    【讨论】:

    • 这里说必须声明标量变量“@rfidSearch”
    • 将@rfidSearch 参数添加到cmdPatient
    【解决方案2】:

    问题1:您没有提供命令对象文本。
    解决方案1:您需要使用CommandText属性提供命令对象文本

    试试这个:

    string strPatient = "SELECT * FROM PATIENT WHERE patientID IN ("+cmdRFID.CommandText+")";
    

    解决方案 2: 如果您想进行正确的搜索,请使用关键字 LIKE 而不是等于 = 运算符,并在第一个查询中的搜索文本前后使用 % 符号.

    完整代码:

    string strRFID = "SELECT patientID FROM RFID WHERE rfidentification like @rfidSearch";
    SqlCommand cmdRFID = new SqlCommand(strRFID, connection);
    cmdRFID.Parameters.AddWithValue("@rfidSearch", "%"+ txtRFID.Text+ "%");
    string strPatient = "SELECT * FROM PATIENT WHERE patientID IN ("+cmdRFID.CommandText+")";
    

    【讨论】:

    • 现在它给了我这个错误:必须声明标量变量“@rfidSearch”
    猜你喜欢
    • 1970-01-01
    • 2020-02-16
    • 1970-01-01
    • 2014-02-18
    • 1970-01-01
    • 2014-02-27
    • 2021-04-06
    • 2022-01-21
    • 1970-01-01
    相关资源
    最近更新 更多