C# SQL Server中的更新查询不是';行不通
我有一个更新数据库的类方法。。但它不起作用,我也找不出是怎么回事C# SQL Server中的更新查询不是';行不通,c#,asp.net,sql-server,C#,Asp.net,Sql Server,我有一个更新数据库的类方法。。但它不起作用,我也找不出是怎么回事 try catch块中没有错误。。在数据库中,id的类型是int,分类的类型是nvarchar(50) 我还尝试将id从int转换为string,但不起作用,也没有错误 数据库列名和变量名相同。连接字符串保存在用于插入数据的web.config文件中 public string update(int id, string catagory) { //creating database connection
try catch
块中没有错误。。在数据库中,id
的类型是int
,分类的类型是nvarchar(50)
我还尝试将id
从int
转换为string
,但不起作用,也没有错误
数据库列名和变量名相同。连接字符串保存在用于插入数据的web.config
文件中
public string update(int id, string catagory)
{
//creating database connection
SqlConnection objConnection = new SqlConnection(strConnection);
objConnection.Open();
string error = "";
try
{
//firing command
string strCommand = "UPDATE Data SET catagory = '" + catagory + "' WHERE (id = '" + id + "')";
SqlCommand objCommand = new SqlCommand(strCommand, objConnection);
objCommand.ExecuteNonQuery();
}
catch(System.Data.SqlClient.SqlException ex)
{
error = ex.ToString();
}
//closing database connection
objConnection.Close();
return error;
}
问题:数据在未来版本的SqlServer中可能是保留字
从MSDN:
数据可以作为新数据保留在SQL Server的未来版本中
实现了功能
解决方案:将保留字括在方括号内,作为[数据]
试试这个:
string strCommand = "UPDATE [Data] SET catagory = '" + catagory + "' WHERE (id = " + id + ")";
建议1:不需要将整数参数括在单引号内
建议2:您的更新查询可能受到sqlinjection攻击。请使用参数化查询来避免这些攻击
建议3:您可以使用ExecuteNonQuery()
方法的return
值来标识UPDATE
命令的状态
完成代码:使用参数化查询
try
{
//firing command
string strCommand = "UPDATE [Data] SET catagory = @catagory WHERE (id =@id)";
SqlCommand objCommand = new SqlCommand(strCommand, objConnection);
objCommand.Parameters.AddWithValue("@catagory",catagory);
objCommand.Parameters.AddWithValue("@id",id);
int status;
status = objCommand.ExecuteNonQuery();
if(status>0)
MessageBox.Show("Data Updated Successfully!");
else
MessageBox.Show("Update Failed!");
}
问题:数据在未来版本的SqlServer中可能是保留字
从MSDN:
数据可以作为新数据保留在SQL Server的未来版本中
实现了功能
解决方案:将保留字括在方括号内,作为[数据]
试试这个:
string strCommand = "UPDATE [Data] SET catagory = '" + catagory + "' WHERE (id = " + id + ")";
建议1:不需要将整数参数括在单引号内
建议2:您的更新查询可能受到sqlinjection攻击。请使用参数化查询来避免这些攻击
建议3:您可以使用ExecuteNonQuery()
方法的return
值来标识UPDATE
命令的状态
完成代码:使用参数化查询
try
{
//firing command
string strCommand = "UPDATE [Data] SET catagory = @catagory WHERE (id =@id)";
SqlCommand objCommand = new SqlCommand(strCommand, objConnection);
objCommand.Parameters.AddWithValue("@catagory",catagory);
objCommand.Parameters.AddWithValue("@id",id);
int status;
status = objCommand.ExecuteNonQuery();
if(status>0)
MessageBox.Show("Data Updated Successfully!");
else
MessageBox.Show("Update Failed!");
}
如果id
列是int
,则不需要对其使用单引号。只需像WHERE(id=“+id+”)
一样使用它。单引号用于字符列类型
但不要用这种方式
你应该经常使用。这种类型的字符串连接对攻击是开放的
另外,数据
可能会出现在SQL Server的未来版本中。将来可能需要在方括号中使用它,如[DATA]
顺便说一下,使用来处理您的SqlConnection
和SqlCommand
。如果id
列是int
,则不需要对其使用单引号。只需像WHERE(id=“+id+”)
一样使用它。单引号用于字符列类型
但不要用这种方式
你应该经常使用。这种类型的字符串连接对攻击是开放的
另外,数据
可能会出现在SQL Server的未来版本中。将来可能需要在方括号中使用它,如[DATA]
顺便说一下,使用来处理您的SqlConnection
和SqlCommand
。始终使用参数化查询来进行反查询
第一个参数指定SQL语句
第二个参数是SqlConnection
第三个参数是SqlTransaction。
这是一个
和using语句
自动处理并关闭sql连接
和sql命令
public string update(int id, string catagory)
{
//creating database connection
using( SqlConnection objConnection = new SqlConnection(strConnection))
{
objConnection.Open();
string error = "";
try
{
string strCommand = "UPDATE Data SET catagory = @catagory WHERE id = @id ";
using( SqlCommand objCommand = new SqlCommand(strCommand, objConnection))
{
objCommand.Parameters.AddWithValue("@catagory",catagory);
objCommand.Parameters.AddWithValue("@id",id);
objCommand.ExecuteNonQuery();
}
}
catch(System.Data.SqlClient.SqlException ex)
{
error = ex.ToString();
}
return error;
}
}
始终使用参数化查询,以进行反查询
第一个参数指定SQL语句
第二个参数是SqlConnection
第三个参数是SqlTransaction。
这是一个
和using语句
自动处理并关闭sql连接
和sql命令
public string update(int id, string catagory)
{
//creating database connection
using( SqlConnection objConnection = new SqlConnection(strConnection))
{
objConnection.Open();
string error = "";
try
{
string strCommand = "UPDATE Data SET catagory = @catagory WHERE id = @id ";
using( SqlCommand objCommand = new SqlCommand(strCommand, objConnection))
{
objCommand.Parameters.AddWithValue("@catagory",catagory);
objCommand.Parameters.AddWithValue("@id",id);
objCommand.ExecuteNonQuery();
}
}
catch(System.Data.SqlClient.SqlException ex)
{
error = ex.ToString();
}
return error;
}
}
@SudhakartilapudiDATA
目前不是保留关键字。但它可能在未来发生。这并不是OP的代码不起作用的主要原因。@SonerGönül:是的,亲爱的,我刚刚找到了那个信息:)谢谢你的剩余部分。@SonerGönül我像你一样尝试过,但在刷新数据库后,它仍然没有改变。@Sudhakartilapudi你收到任何异常或错误消息吗?你确定你的连接字符串是正确的吗?请提供更多详细信息。@WahidMasud:那么,您是否使用状态
尝试了我的最新代码?尝试使用altest代码,看看它返回的是成功还是失败消息?@sudhakardatilapudiDATA
现在不是保留关键字。但它可能在未来发生。这并不是OP的代码不起作用的主要原因。@SonerGönül:是的,亲爱的,我刚刚找到了那个信息:)谢谢你的剩余部分。@SonerGönül我像你一样尝试过,但在刷新数据库后,它仍然没有改变。@Sudhakartilapudi你收到任何异常或错误消息吗?你确定你的连接字符串是正确的吗?请提供更多详细信息。@WahidMasud:那么,您是否使用状态
尝试了我的最新代码?尝试使用altest代码,看看它返回的是成功消息还是失败消息?不要将字符串连接到SQL命令中,这会使您的代码容易受到SQL注入攻击,而且效率较低。改用参数化查询。另请参见,它是一个类别(而不是类别)。不要将字符串连接到SQL命令中,这会使您的代码容易受到SQL注入攻击,而且效率较低。改用参数化查询。另请参见,它是一个类别(而不是分类)