如何解决SqlCommand.Parameters.Add在尝试执行DELETE语句时不转换参数
我正在使用以下代码对数据库执行INSERT查询,效果很好。
public int InsertPerson(Person person,out string errormsg)
{
SqlConnection dbConnection = new SqlConnection();
dbConnection.ConnectionString = @"Data Source=(localdb)\mssqllocaldb;Initial Catalog=PersonDB;Integrated Security=True";
String sqlstring = "INSERT INTO PersonTable ( FirstName,LastName ) VALUES ( @firstname,@lastname )";
SqlCommand dbCommand = new SqlCommand(sqlstring,dbConnection);
dbCommand.Parameters.Add("FirstName",SqlDbType.NVarChar,30).Value = person.FirstName;
dbCommand.Parameters.Add("LastName",30).Value = person.LastName;
try
{
dbConnection.Open();
int i = 0;
i = dbCommand.ExecuteNonQuery();
if (i == 1)
{
errormsg = "";
}
else
{
errormsg = "Could not add person";
}
return i;
}
catch (Exception e)
{
errormsg = e.Message;
return 0;
}
finally
{
dbConnection.Close();
}
}
但是,当我尝试在DELETE查询中使用逻辑时,它不会将@firstname
和@lastname
转换为传递给方法调用的参数值。
public int DeletePerson(Person person,out string errormsg)
{
SqlConnection dbConnection = new SqlConnection();
dbConnection.ConnectionString = @"Data Source=(localdb)\mssqllocaldb;Initial Catalog=PersonDB;Integrated Security=True";
String sqlstring = "DELETE FROM PersonTable WHERE FirstName = @firstname AND LastName = @lastname";
SqlCommand dbCommand = new SqlCommand(sqlstring,30).Value = person.LastName;
try
{
dbConnection.Open();
int i = 0;
i = dbCommand.ExecuteNonQuery();
if (i == 1)
{
errormsg = "";
}
else
{
//errormsg = "Could not delete person";
errormsg = sqlstring;
}
return i;
}
catch (Exception e)
{
errormsg = e.Message;
return 0;
}
finally
{
dbConnection.Close();
}
}
从DELETE方法创建的查询看起来像这样DELETE FROM PersonTable WHERE FirstName = @firstname AND LastName = @lastname
当我对SQL查询进行硬编码时,它工作正常,但当我使用Person参数的属性作为查询的一部分时,效果很好。
解决方法
您可能会误解参数的工作方式。该值在SQL语句中未“替换”。使用单独提供的参数值按原样发送SQL语句。因此,在客户端不会看到替换了值的SQL字符串。
换句话说,sqlstring
的值不变。如果这就是您要查看的内容,那么它什么也不会告诉您。还有其他问题-在数据库中找不到名称组合,或者在大小写,空格等方面存在某些差异。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。