c# использование параметров.AddWithValue в SqlDataAdapter
Как я могу использовать параметры.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);
но это не удалось.
4 ответов
строка, используемая для инициализации 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)
});
использовать da.SelectCommand.Parameters.Add()
вместо cmd.Parameters.Add()
, вот образец для работы с хранимой процедурой, которая принимает два параметра, а второй-параметр nullable 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;
}
}
}
попробуйте это:
mySearchString = "Select * From test Where ([title] LIKE '%' + @title + '%')";
cmd.Parameters.Add("@title", SqlDbType.VarChar, 120);
cmd.Parameters("@title").Value = TextBox1.Text;
Я использую ретранслятор для отображения данных
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 =@CategoryID", 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();
}