我遇到过这样的情况,即此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()获得的值,它与数据库中的值完全相同。我已经使用reader.hasrows检查是否有任何返回的行。
顺便说一句,我使用的是c#和access 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。
发布于 2011-11-05 15:32:58
试着去掉@OA_Name的括号。
command.CommandText = "SELECT [OA_ID] FROM [Operating_Authority_Table] WHERE [OA_Name] = @OA_Name";
command.Parameters.AddWithValue("@OA_Name", obj.GEToperatingauthority());发布于 2011-11-05 15:10:46
将其更改为:
首先尝试测试您的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
}问候
发布于 2011-11-05 15:16:31
尝试测试:
command.CommandText = "SELECT [OA_ID] FROM [Operating_Authority_Table] WHERE [OA_Name] = [" + obj.GEToperatingauthority() + "]";不是很优雅,但它可以工作,如果它不能工作,那么这肯定是一个问题
command.Parameters.AddWithValue("@OA_Name", obj.GEToperatingauthority());EDIT - OK回复您的评论:现在尝试这样做:
command.CommandText = "SELECT [OA_ID] FROM [Operating_Authority_Table] WHERE [OA_Name] = [" + "'" + obj.GEToperatingauthority() + "'" + "]";如果这是有效的,那就是缺乏‘’
https://stackoverflow.com/questions/8018722
复制相似问题