[英]SQL Server : Update query not working in ASP.Net
我在更新查询时遇到问题。
我无法运行第二种方法。
这有效:
if (Methods.Update("TABLE1",
"Name", TextBoxName.Text,
"Column1", "1"
) == 1)
这不起作用:
if (Methods.Update("TABLE1",
"Name", TextBoxName.Text,
"Surname", TextBoxSurname.Text,
"Column1", "2"
) == 1)
我收到此错误:
将nvarchar值'a4'转换为数据类型int时,转换失败。
工作方式:
public static int Update(string Table1, string Column1, string Column1Value, string WhereColumn, string WhereValue)
{
SqlConnection connection = new SqlConnection(WebConfigurationManager.ConnectionStrings["connection"].ConnectionString);
SqlCommand command = new SqlCommand("UPDATE " + Table1 + " SET " + Column1 + "= @Column1Value " + " WHERE " + WhereColumn + "=@WhereValue", connection);
command.Parameters.AddWithValue("@Column1Value", Column1Value);
command.Parameters.AddWithValue("@WhereValue", WhereValue);
try
{
if ((connection.State == ConnectionState.Closed) || (connection.State == ConnectionState.Broken))
{
connection.Open();
}
int i = Convert.ToInt16(command.ExecuteNonQuery());
return i;
}
finally
{
connection.Close();
}
}
不起作用的方法:
public static int Update(string Table1, string Column1, string Column1Value, string Column2, string Column2Value, string WhereColumn, string WhereValue)
{
SqlConnection connection = new SqlConnection(WebConfigurationManager.ConnectionStrings["connection"].ConnectionString);
SqlCommand command = new SqlCommand("UPDATE " + Table1 + " SET " + Column1 + "= @Column1Value," + Column2 + " = @Column2Value WHERE " + WhereColumn + "=" + WhereValue, connection);
command.Parameters.AddWithValue("@Column1Value", Column1Value);
command.Parameters.AddWithValue("@Column2Value", Column2Value);
command.Parameters.AddWithValue("@WhereValue", WhereValue);
try
{
if ((connection.State == ConnectionState.Closed) || (connection.State == ConnectionState.Broken))
{
connection.Open();
}
int i = Convert.ToInt16(command.ExecuteNonQuery());
return i;
}
finally
{
connection.Close();
}
}
我的桌子内容:
TABLE1
------------------------
Name Surname Column1
Name1 Surname1 NULL
Name2 Surname2 NULL
Name3 Surname3 a4
Name4 Surname4 NULL
Name5 Surname5 1
Name6 Surname6 2
Name7 Surname7 3
我的表结构:
CREATE TABLE [User1].[TABLE1]
(
[ID] INT IDENTITY (1, 1) NOT NULL,
[Name] NVARCHAR (50) NOT NULL,
[Surname] NVARCHAR (50) NOT NULL,
[Column1] NVARCHAR (50) NULL,
PRIMARY KEY CLUSTERED ([ID] ASC)
);
我不明白原因。
提前致谢。
非工作方法中的问题是您没有参数WhereValue
:
WhereColumn + "=" + WhereValue,
代替
WhereColumn + "=@WhereValue"
因此,SQL将其强制转换为INT,然后无法将其正确地与a4
行进行比较。
虽然更改第二种方法可以解决您的问题,但此处的SQL中存在一些安全问题。 如果有人向您传递了错误的表名或列名,则很有可能遭受SQL注入。 至少,您应该检查以确保要传递的值在实际表和列名的列表中-以便某人无法将实际上不应该更新的表传递给您。 想象一下,如果恶意用户为您的表名参数传递了此消息: "TableName SET Column1 = 1; SELECT * FROM INFORMATION_SCHEMA.TABLES --"
将会发生什么。
确实,最好具有特定的功能来更新特定的表和值,并确保始终对这些参数进行参数设置以避免SQL注入
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.