c#的select查询不能使用参数
本文关键字:参数 不能 查询 select | 更新日期: 2023-09-27 18:13:31
我遇到过这种情况,即这个SQL语句不工作。
command.Parameters.AddWithValue("@OA_Name", obj.GEToperatingauthority());
command.CommandText = "SELECT [OA_ID] FROM [Operating_Authority_Table] WHERE [OA_Name] = [@OA_Name]";
但是当我将['@OA_Name']更改为表中的值时,此SQL语句可以工作。
command.CommandText = "SELECT [OA_ID] FROM [Operating_Authority_Table] WHERE [OA_Name] = ['OA 101']";
我已经测试了我从obj.GetOperatingauthority()中得到的值,它与数据库中的值完全相同。我用过阅读器。Hasrows检查是否有返回的行。
顺便说一句,我使用c#和访问2010数据库..
编辑:我放入了下面的大部分代码:
using (var command = connection.CreateCommand())
{
connection.Open();
command.CommandType = CommandType.Text;
command.Parameters.AddWithValue("@NRIC", obj.GETnricfinnumber());
command.Parameters.AddWithValue("@Participant_Name", obj.GETname());
command.Parameters.AddWithValue("@Gender", obj.GETgender());
command.Parameters.AddWithValue("@DOB", obj.GETdateofbirth());
command.Parameters.AddWithValue("@Nationality", obj.GETnationality());
command.Parameters.AddWithValue("@Race", obj.GETrace());
command.Parameters.AddWithValue("@Residential_Address", obj.GETresidentialaddress());
command.Parameters.AddWithValue("@Contact_Number", obj.GETcontactnumber());
command.Parameters.AddWithValue("@Email_Address", obj.GETemailaddress());
command.CommandText = "SELECT [NRIC] FROM [Participant_Table] WHERE [NRIC] = [@NRIC]";
using (var reader = command.ExecuteReader())
{
while (reader.Read())
{
if (reader.GetString(0).ToLower().Equals(obj.GETnricfinnumber().ToLower()))
{
message.show(1, "", "exists");
//return false;
}
}
}
command.CommandText = "SELECT [OA_ID] FROM [Operating_Authority_Table] WHERE [OA_Name] = @OA_Name";
command.Parameters.AddWithValue("@OA_Name", obj.GEToperatingauthority());
using (var reader = command.ExecuteReader())
{
if (!reader.HasRows)
{
message.show(1, "", "no rows!"); return false; //to test whether has rows or no rows
}
编辑2:getOperatingAuthority不可能是错误的,因为它基本上是一个"闭环"系统,其中OA_Name用于填充组合框,并且从该组合框中选择的值用于引用回表以获取ID。
试着去掉@OA_Name
的大括号。
command.CommandText = "SELECT [OA_ID] FROM [Operating_Authority_Table] WHERE [OA_Name] = @OA_Name";
command.Parameters.AddWithValue("@OA_Name", obj.GEToperatingauthority());
试着测试:
command.CommandText = "SELECT [OA_ID] FROM [Operating_Authority_Table] WHERE [OA_Name] = [" + obj.GEToperatingauthority() + "]";
没有那么优雅,但是可以工作,如果不行,那么肯定是
有问题。command.Parameters.AddWithValue("@OA_Name", obj.GEToperatingauthority());
编辑- OK回应你的评论:现在试试这个:
command.CommandText = "SELECT [OA_ID] FROM [Operating_Authority_Table] WHERE [OA_Name] = [" + "'" + obj.GEToperatingauthority() + "'" + "]";
如果可以,那就是缺少'
改成:
尝试先测试obj.GEToperatingauthority()是否有一个值。
command.CommandText = "SELECT [OA_ID] FROM [Operating_Authority_Table] WHERE [OA_Name] = @OA_Name";
var getoperation = Convert.ToString(obj.GEToperatingauthority());
command.Parameters.AddWithValue("@OA_Name", getoperation );
//use this for checking
var dt = new DataTable();
var da = new SqlDataAdapter(command);
connection.Open();
da.Fill(dt);
if(dt.Rows.Count > 0)
{
//records found
}
else
{
//No records Found
}
对