无法在数据库中调用nvarchar上的方法-没有nvarchar -试图参数化表名
本文关键字:nvarchar 没有 参数 数据库 调用 方法 | 更新日期: 2023-09-27 18:11:54
我试图查询我的数据库,以显示相关信息,它是工作,直到我开始使用参数。现在它告诉我,我不能在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
还是需要一个特殊的参数?
这不是使用参数来处理安全性的方式。
你的应用程序应该知道哪些表和哪些列。
是的,你可以使用。net变量作为表和列名来动态地构建一个语句,但是这个变量永远不应该是用户直接输入的(它们在表名中得到键)。
你可能有一个used和new的下拉,在那里你建立一个查询并插入表名tablennew或tableUsed。但是你不能使用参数。
所有参数都是数据类型。(没有列或表数据类型)
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);
}
}