У меня есть хранимая процедура, которую мне нужно запустить в C #, и установить набор результатов, возвращаемых из SP, в таблицу HTML. Обратите внимание, что SP работает хорошо в SSMS и возвращает результаты.
Код C #, который я использую (это в проекте ASP 4.5):
SQLDatabase sqldb = new SQLDatabase();
using (SqlConnection sqlcn = new SqlConnection(sqldb.GetConnectionString().ToString()))
{
if (sqlcn.State == ConnectionState.Closed)
{
sqlcn.Open();
}
SqlCommand cmd = new SqlCommand("[MyStoredProcedure]", sqlcn);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@FromDate", Convert.ToDateTime(txtFrom.Value.ToString()));
cmd.Parameters.AddWithValue("@ToDate", Convert.ToDateTime(txtTo.Value.ToString()));
using (SqlDataAdapter a = new SqlDataAdapter(cmd))
{
DataSet ds = new DataSet();
a.Fill(ds);
dtExtra = ds.Tables[0];
}
}
Приведенный выше код возвращает 0 строк, даже если SP работает в SSMS. Во время отладки строка подключения и параметры становятся все правдой, никаких проблем. Строка подключения:
<add name="DefaultDB" connectionString="Data Source=TestEnv;Initial Catalog=TestTable;Integrated Security=SSPI;" providerName="System.Data.SqlClient"/>
Я не понимаю, что может быть причиной этого. Я нашел тему ниже, но я уже использую Integrated Security=SSPI
в строке подключения, так что это мне не помогло. Любой совет будет оценен.
ASP.NET хранит вызов proc, не возвращая строк, но делает это в Management Studio!
РЕДАКТИРОВАТЬ: РЕШЕНО! Спасибо @NineBerry. Это превратилось в проблему между / и использованием в SP. Изменение txtTo.Value как: DateTime.Today.AddDays(1).ToString("yyyy-MM-dd");
в коде устранило проблему (раньше было DateTime.Today.ToString("yyyy-MM-dd")
, я должен был включить его в часть кода, не думал, что это связано с этим, извините). Лучшим решением было бы обновить SP, используя >=
и <=
вместо / и ключевых слов tho.