2015-11-20 2 views
-1

У меня возникли проблемы с попыткой понять это. Я использую хранимые процедуры SQL Server, которые открывают курсор для динамического запроса и запускают результат. например:Чтение вывода курсора и сохранение в наборе данных в C#

CREATE PROCEDURE 
@results CURSOR VARYING OUTPUT 
@id INT 
AS 
DECLARE @query AS VARCHAR(max) 
SET @query = ' SELECT * from EMPtable where'[email protected]+'= emp.id' 
SET @results = CURSOR FOR SELECT @query 
OPEN @results 

Затем я закрываю и де-выделяю курсор. Я понятия не имею, как читать значения набора данных и хранить их в таблице данных на C#. Я пробовал использовать адаптер данных и считыватель данных, но все возвращает нулевое значение или возвращает ошибку.

+2

это не процедура, которую вы хотите использовать, делать то, что вы хотите сделать. ваша вся процедура должна быть просто 'CREATE PROCEDURE EMP_GetByID @id INT AS BEGIN SELECT * FROM EMPtable WHERE id = @id END' – JamieD77

+1

@ JamieD77, который должен быть ответом. Я почти заплакал, когда увидел, что эта процедура использует курсор для оператора select. –

+0

@SeanLange ничто из этого не имеет большого смысла. он даже не скомпилировал бы, если бы он не помещал sql в varchar из-за 'emp.id' – JamieD77

ответ

3

Добро пожаловать в переполнение стека!

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

CREATE PROCEDURE dbo.spSelectEmployee 
(
    @id int 
) 
AS BEGIN 
    SELECT * 
    FROM EMPtable 
    WHERE id = @id 
END 

Затем, вы можете прочитать его в DataTable в C#, как это и сделать что-то с ним:

void GetEmployee(int employeeID) 
{ 
    // 1 
    // Open connection 
    using (SqlConnection sqlConnection = new SqlConnection(Properties.Settings.Default.DataConnectionString)) 
    { 
     sqlConnection.Open(); 
     // 2 
     // Create new DataAdapter 
     using (SqlDataAdapter sqlDataAdapter = new SqlDataAdapter("EXEC dbo.spSelectEmployee " + employeeID, sqlConnection)) 
     { 
      // 3 
      // Use DataAdapter to fill DataTable 
      DataTable dataTable = new DataTable(); 
      sqlDataAdapter.Fill(dataTable); 
     // 4 
     // Render data onto the screen 
     // dataGridView1.DataSource = dataTable; // <-- From your designer 
     } 
    } 
} 
Смежные вопросы