c # Использование Parameters.AddWithValue в SqlDataAdapter

Как я могу использовать Parameters.AddWithValue с SqlDataAdapter. Ниже ищем коды.

var da = new SqlDataAdapter("SELECT * FROM annotations WHERE annotation LIKE '%"+txtSearch.Text+"%'", _mssqlCon.connection);
var dt = new DataTable();
da.Fill(dt);

Я переписал код так:

SqlDataAdapter da;
da = new SqlDataAdapter("SELECT * FROM annotations WHERE annotation LIKE '%@search%'", _mssqlCon.connection);
da.SelectCommand.Parameters.AddWithValue("@search",txtSearch.Text);
var dt = new DataTable();
da.Fill(dt);

но это не удалось.

 user137243007 нояб. 2012 г., 20:20
Ой, прости. Когда я нажал кнопку поиска, это не давало никакой реакции.

Ответы на вопрос(4)

mySearchString = "Select * From test Where ([title] LIKE '%' + @title + '%')";
cmd.Parameters.Add("@title", SqlDbType.VarChar, 120);
cmd.Parameters("@title").Value = TextBox1.Text;

использованиеda.SelectCommand.Parameters.Add() вместоcmd.Parameters.Add(), Вот'Пример работы с хранимой процедурой, которая принимает два параметра, а второй - обнуляемый параметр int:

public DataTable GetData(int par1, int? par2)
            {
                using (SqlConnection conn = new SqlConnection(connectionString))
                {
                    using (SqlDataAdapter da = new SqlDataAdapter())
                    {
                        string sql = "StoreProcedure_name";
                        da.SelectCommand = new SqlCommand(sql, conn);
                        da.SelectCommand.CommandType = CommandType.StoredProcedure;
                        da.SelectCommand.Parameters.Add("@Par1", SqlDbType.Int).Value = par1;
                        da.SelectCommand.Parameters.Add("@Par2", SqlDbType.Int).Value = (object)par2?? DBNull.Value;
                        DataSet ds = new DataSet();
                        da.Fill(ds, "SourceTable_Name");

                        DataTable dt = ds.Tables["SourceTable_Name"];

                        //foreach (DataRow row in dt.Rows)
                        //{
                        //You can even manipulate your data here
                        //}
                        return dt;
                    }
                }

            }
Решение Вопроса

используемая для инициализацииSqlDataAdapter становитсяCommandText изSelectCommand свойство SqlDataAdapter.

Вы можете добавить параметры к этой команде с помощью этого кода

da = new SqlDataAdapter("SELECT * FROM annotations WHERE annotation LIKE @search",
                        _mssqlCon.connection);
da.SelectCommand.Parameters.AddWithValue("@search","%" + txtSearch.Text + "%");
Сначала удалите одинарную кавычку вокруг параметра-заполнителя.Во-вторых, добавьте подстановочный знак непосредственно в параметр Value в AddWithValue

Вы попросили использоватьAddWithValue, но помните, что, хотя это полезный ярлык, есть и многочисленные недостатки, и все они хорошо документированы.

Первый:Можем ли мы прекратить использовать AddWithValue () уже? где автор обсуждает какAddWithValue может вернуть неправильные результаты в ваших запросахВо-вторых:Как код доступа к данным влияет на производительность базы данных где автор представляет доказательства сильных проблем производительности дляAddWithValue

Итак, тот же код безAddWithValue и используяИнициализаторы объектов и коллекций синтаксис может быть записан как

da = new SqlDataAdapter("SELECT * FROM annotations WHERE annotation LIKE @search",
                        _mssqlCon.connection);
da.SelectCommand.Parameters.Add(new SqlParameter
{
    ParameterName = "@search",
    Value = "%" + txtSearch.Text + "%",
    SqlDbType = SqlDbType.NVarChar,
    Size = 2000  // Assuming a 2000 char size of the field annotation (-1 for MAX)
});

Я использую Repeater для показа данных

int queryString =int.Parse(Request.QueryString["Id"]);

SqlConnection conn =new SqlConnection("server=.; Database=Northwind; 
Integrated Security=true;");

try{
conn.Open();

SqlDataAdapter dataAdapter = new SqlDataAdapter("SELECT ProductID, ProductName, UnitPrice, CategoryID FROM Products WHERE CategoryID [email protected]", conn);

dataAdapter.SelectCommand.Parameters.Add("@CategoryID", queryString);
                        DataSet dataSet = new DataSet();
                        dataAdapter.Fill(dataSet);
                        QueryStringProductListRepeater.DataSource = dataSet;
                        QueryStringProductListRepeater.DataBind();
}

catch{
Response.Write("QueryStringProductListRepeater");
}

finally{
conn.Close();
}

Ваш ответ на вопрос