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。

c#的select查询不能使用参数

试着去掉@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
   }