Должен объявлять скалярную переменную при повторном использовании параметра с IDbConnection - PullRequest
0 голосов
/ 15 февраля 2019

Я пытаюсь параметризовать SQL-запрос.Я предоставляю упрощенную версию для конфиденциальности.это в asp.net 4.7 с T-SQL из C #.Магазин имеет право продавать для нас между определенными датами, и продукты также могут продаваться только между другими датами, которые могут не совпадать.Это версия тестовой страницы, которую я создал, поскольку обычная версия распространяется на несколько файлов классов.Базы данных доступны только для чтения от третьей стороны.

int intStoreID = 12345;
DateTime dtAsOfDate = DateTime.Now;
string strConnectionString = "Data Source=fake.site.com;Initial Catalog=my_stores; Persist Security Info=True;User ID=me;Password=mypassword";
DataTable dt = new DataTable();

string strQ = @" SELECT * FROM stores AS s
INNER JOIN store_sales_authorities AS ssa
on s.istore_id = ssa.istore_id
INNER JOIN store_product_sales_authorities AS spsa
on s.istore_id = spsa.istore_id
INNER JOIN products AS p
on spsa.iproduct_id = p.iproduct_id
where s.istore_id = @istoreid
and ssa.dtstart_date <= @dtAsOfDate
and (ssa.dtend_date <= @dtAsOfDate or ssa.dtend_date IS NULL)
and psa.dtstart_date <= @dtAsOfDate
and (psa.dtend_date <= @dtAsOfDate or psa.dtend_date IS NULL)";

System.Data.IDbConnection dbConnection = new System.Data.SqlClient.SqlConnection(strConnectionString);
System.Data.IDbCommand dbCommand = new System.Data.SqlClient.SqlCommand();
dbCommand.CommandText = strQ;
dbCommand.Connection = dbConnection;
dbCommand.CommandTimeout = 999999999;
IDbDataParameter objParameter = dbCommand.CreateParameter();
objParameter.ParameterName = "@dtAsOfDate";
objParameter.DbType = DbType.DateTime;
objParameter.Value = dtAsOfDate;
IDbDataParameter objParameter2 = dbCommand.CreateParameter();
objParameter2.ParameterName = "@istoreid";
objParameter2.DbType = DbType.Int32;
objParameter2.Value = intStoreID;
dbCommand.Parameters.Add(objParameter2);
System.Data.IDbDataAdapter dataAdapter = new System.Data.SqlClient.SqlDataAdapter();
dataAdapter.SelectCommand = dbCommand;
System.Data.DataSet dataSet = new System.Data.DataSet();
dataAdapter.Fill(dataSet);
dt = dataSet.Tables[0];

Когда я запускаю это, я получаю исключение: должен объявить скалярную переменную "@dtAsOfDate".Описание: во время выполнения текущего веб-запроса произошло необработанное исключение.Пожалуйста, просмотрите трассировку стека для получения дополнительной информации об ошибке и о том, где она возникла в коде.

Exception Details: System.Data.SqlClient.SqlException: Must declare the scalar variable "@dtAsOfDate".

Я не смог найти ни одного экземпляра кого-либо, параметризовавшего несколько экземпляров одного и того же параметра, поэтому я не знаю, в этом ли проблема.Как правильно это параметризировать?

...