我正在尝试查询我的数据库以显示相关信息,它一直在运行,直到我开始使用参数。现在它告诉我,我无法在nvarchar上调用方法,我无法弄清楚问题。
当我做这样的事情时,我试图弄清楚这是不是一个错误:
@Parameter.customer_id
但我不确定。
这是我的查询行:
cmd.CommandText = "select Customer.customer_id, Customer.customer_name," +
"@Product.license_start_date, " + p + ".version, " + p + "Details.processor " +
"from Customer " +
"left outer join " + p +
" on Customer.customer_id = " + p + ".customer_id" +
"left outer join " + p + "Details " +
" on " + p + ".customer_id = " + p + "Details.customer_id";
cmd.Parameters.AddWithValue("@Product", ddProducts.SelectedItem.Text);
我使用+ p +只是为了确保查询正常运行,现在我正试图让它与参数一起使用
另外一个附带问题,我的表格是@ Product + Details(例如Computer,ComputerDetails)。我想这样做,所以我可以做+ Product +“Details”。我能这样做吗:
@Product Details
或者我必须有一个特殊参数吗?
答案 0 :(得分:1)
这不是您使用参数来解决安全问题的方法 你应用应该知道什么表和什么列。
是的,你可以使用表变量和列名的.NET变量动态构建一个语句,但该变量永远不应该是用户直接输入(它们会在表名中键入)。
您可以在建立查询并插入tableNew或tableUsed的表名的情况下下载used与new。但你不能使用参数。
所有参数都是数据类型。 (没有列或表数据类型)
SqlDbType
让我们说用户可以输入零件描述 这是你永远不应该直接传递给TSQL的东西 你把它放在一个参数中,这样用户就不会做坏事。
string commandText = "UPDATE Sales.Store SET Demographics = @demographics "
+ "WHERE CustomerID = @ID;";
using (SqlConnection connection = new SqlConnection(connectionString))
{
SqlCommand command = new SqlCommand(commandText, connection);
command.Parameters.Add("@ID", SqlDbType.Int);
command.Parameters["@ID"].Value = customerID;
// Use AddWithValue to assign Demographics.
// SQL Server will implicitly convert strings into XML.
command.Parameters.AddWithValue("@demographics", demoXml);
try
{
connection.Open();
Int32 rowsAffected = command.ExecuteNonQuery();
Console.WriteLine("RowsAffected: {0}", rowsAffected);
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}