C# 使用SQL参数重写

C# 使用SQL参数重写,c#,sql-server,parameters,C#,Sql Server,Parameters,如何重写它,使其使用参数而不是字符串值?我知道如何为一个“SqlCommand”实现它,但我似乎无法在这里实现它 protected void searchFill() { orderByString = orderByList.SelectedItem.Value; fieldString = searchTextBox.Text; string sqlStatement = "SELECT * FROM SecureOrders

如何重写它,使其使用参数而不是字符串值?我知道如何为一个“SqlCommand”实现它,但我似乎无法在这里实现它

    protected void searchFill()
    {
        orderByString = orderByList.SelectedItem.Value;
        fieldString = searchTextBox.Text;
        string sqlStatement = "SELECT * FROM SecureOrders WHERE fName LIKE @fieldString OR lName LIKE @fieldString OR addr LIKE @fieldString OR addr2 LIKE @fieldString OR city LIKE @fieldString OR state LIKE @fieldString OR zip LIKE @fieldString OR zip LIKE @fieldString OR country LIKE @fieldString OR email LIKE @fieldString OR phone LIKE @fieldString OR ccType LIKE @fieldString OR ccNum LIKE @fieldString OR ccExp LIKE @fieldString OR cwaSource LIKE @fieldString OR cwaJoined LIKE @fieldString OR length LIKE @fieldString OR delivery LIKE @fieldString OR price LIKE @fieldString OR url LIKE @fieldString ORDER BY @orderByString";
        using (SqlConnection connection = new SqlConnection(connectionString.ToString()))
        {
            connection.Open();
            SqlDataAdapter dataAdapter = new SqlDataAdapter(sqlStatement, connection);
            dataAdapter.SelectCommand.Parameters.AddWithValue("@fieldString", fieldString);
            dataAdapter.SelectCommand.Parameters.AddWithValue("@orderByString", orderByString);
            SqlCommandBuilder commandBuilder = new SqlCommandBuilder(dataAdapter);
            DataSet dataSet = new DataSet();

            dataAdapter.Fill(dataSet, "SecureOrders");

            DataView source = new DataView(dataSet.Tables[0]);
            DefaultGrid.DataSource = source;
            DefaultGrid.DataBind();
            connection.Close();
        }
    }
这里是我使用参数的另一种方法(只是为了向您展示我确实知道如何稍微使用它们)


SqlDataAdapter
的实例有一个名为
SelectCommand
的属性,您可以将参数附加到该属性:

var dataAdapter = new SqlDataAdapter(someQuery, someConnection);
dataAdapter.SelectCommand.Parameters.AddWithValue("@someParam", someVar);

我想这是vb.net吧?您应该将您正在使用的语言添加到问题的标记中。@Neil,如果您在连接中使用using语句,则可能会出现非常大的错误。关闭连接。Dispose will call.Close()我已经更新了我的第一段代码…现在我收到一个错误,错误是“ORDER by number 1标识的SELECT项包含一个变量,作为标识列位置的表达式的一部分。仅当按引用列名的表达式进行排序时,才允许使用变量。”…有什么想法吗?我不相信
orderby
子句可以接受变量。您可能想开始另一个特定于这样做的问题,但首先检查重复的问题。可能已经有人问过了。
var dataAdapter = new SqlDataAdapter(someQuery, someConnection);
dataAdapter.SelectCommand.Parameters.AddWithValue("@someParam", someVar);