无法在数据库中调用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

还是需要一个特殊的参数?

无法在数据库中调用nvarchar上的方法-没有nvarchar -试图参数化表名

这不是使用参数来处理安全性的方式。
你的应用程序应该知道哪些表和哪些列。

是的,你可以使用。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);
    }
}