Почему некоторые хранимые процедуры не возвращают данные в ASP.Net C # - PullRequest
0 голосов
/ 22 августа 2009

Я попытался создать текстовый файл на ASP.Net с помощью C #. Данные извлекаются из базы данных путем выполнения хранимой процедуры. Я гарантировал, что хранимые процедуры возвращали значения, выполняя его в SQL-сервере Mangement Studio. Я действительно смог сделать это.

Сначала я собираю все связанные таблицы в представление, затем использую хранимую процедуру для получения данных из этого представления. Затем сгенерируйте эти данные в текстовый файл в ASP.Net. используя следующий код:

SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["Name"].ConnectionString);
conn.Open();
SqlCommand cmd = new SqlCommand("Stored Procedure Name", conn);
cmd.CommandType = CommandType.StoredProcedure;
SqlDataAdapter myAdapter = new SqlDataAdapter(cmd);        
DataTable dt = new DataTable();
myAdapter.Fill(dt);           
System.Text.StringBuilder strResult = new System.Text.StringBuilder("");
string createtext = (Server.MapPath("./Feeds/") + "feed.txt");
StreamWriter w = File.CreateText(createtext);
w.Flush();
w.Close();

Я гарантировал, что каждое представление также возвращает значения (в SQL Server Management Studio).

Но проблема в том, что не все хранимые процедуры возвращали значения в ASP.Net. Я получаю только пустой текстовый файл, хотя все хранимые процедуры возвращали некоторые значения в SQL Server Management Studio.

Я использую только простые операторы выбора в хранимых процедурах, таких как

select Somthing 
from View_Name 

Этот запрос возвращает некоторое значение в Management Studio, но не ASP.Net (для некоторых хранимых процедур).

В чем может быть проблема для этой проблемы? Пожалуйста, помогите

Ответы [ 3 ]

3 голосов
/ 22 августа 2009

Я не вижу, где вы взяли данные в DataTable и поместили их в текстовый файл.

EDIT:

Поскольку вы указали свой код в комментариях:

Похоже, вы глотаете свои исключения. Если вы просто оставляете код для краткости замечательно, но если нет, то вы можете скрыть ошибку в операторе catch, поскольку ничего не делаете с исключением.

Например, у вас может быть проблема с разрешениями на SP или View, и вы не знаете этого.

Если это не так, то: Отладка / добавление точки останова для этого кода, чтобы увидеть, есть ли у данных данных.

Вы также можете использовать SQL Profiler, чтобы увидеть, что происходит с SQL Server из вашего кода.

2 голосов
/ 22 августа 2009

В дополнение к очевидному факту, что вы не используете данные, которые вы извлекли из базы данных, ваш код может пропускать ресурсы, если генерируются исключения. Во избежание этого следует написать следующее:

using (SqlConnection conn = new SqlConnection(
       ConfigurationManager.ConnectionStrings["Name"].ConnectionString))
{
    conn.Open();
    using (SqlCommand cmd = new SqlCommand("Stored Procedure Name", conn))
    {
        cmd.CommandType = CommandType.StoredProcedure;
        using (SqlDataAdapter myAdapter = new SqlDataAdapter(cmd))
        {
            using (DataTable dt = new DataTable())
            {
                myAdapter.Fill(dt);
            }
        }
    }
}

System.Text.StringBuilder strResult = new System.Text.StringBuilder("");
string createtext = (Server.MapPath("./Feeds/") + "feed.txt");
using (StreamWriter w = File.CreateText(createtext))
{
    // Do something with w
    w.Flush();
}
0 голосов
/ 24 августа 2009

Вы отладили / добавили точку останова для этого кода, чтобы проверить, есть ли у данных данные? Вы проглатываете какие-либо исключения (вроде как из вашего фрагмента кода)? Например, не могли бы вы иметь проблемы с разрешениями для некоторых из этих SP и / или представлений. Вы также можете использовать SQL Profiler, чтобы увидеть, что происходит с SQL Server из вашего кода

Спасибо, ребята. Я вернулся и действительно посмотрел на виды, которые я использовал. Как я упоминал ранее, некоторые операции со стропами возвращали бы данные текстовых файлов, а некоторые - нет.

В моем случае казалось, что хранимые процедуры, которые извлекали данные из представлений, в которых использовалась определяемая пользователем функция, возвращали пустой файл. (Проблема, с которой я сталкиваюсь) И для этой конкретной хранимой процедуры; После этого кода таблица данных была пустой: myAdapter.Fill (dt); Что объясняет, почему я получил чистый текст.

Я также заглянул в SQL Profiler, он выполнял хранимую процедуру после нажатия кнопки «Создать текст» в ASP.Net. Но данные не были возвращены.

Возможно ли, что UDF вызвал мою проблему. Проблема как-то связана с разрешением UDF. Я думаю, что разрешение может быть причиной проблемы. Как я могу дать разрешение ASP.Net, чтобы иметь возможность получать данные из хранимой процедуры, которая содержит UDF.

Примечание: UDF создается другими разработчиками.

Спасибо. АСЭИ

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...