2013-07-23 10 views
6

Ho creato una stored procedure che accetta un singolo argomento, il nome di una tabella e restituisce 1 se esiste nel database, 0 se non lo è . In SQL Server Management Studio test la mia procedura memorizzata funziona esattamente come mi piacerebbe, tuttavia ho problemi a ottenere quel valore da utilizzare nel mio programma C#.SQL Server stored procedure che restituisce un booleano se esiste una tabella, C# implementazione

mie opzioni sembrano essere ExecuteScalar(), ExecuteNonQuery() o ExecuteReader(), nessuno dei quali sembra opportuno per il compito, né posso farli recuperare anche il mio risultato stored procedure.

Ho provato ad assegnare il mio parametro con entrambi cmd.Parameters.AddWithValue e cmd.Parameters.Add di nuovo inutilmente.

+1

È il vostro stored procedure tornando o selezionando il risultato? È più facile se "selezioni TableExists = 1" invece di "return 1". Quindi è possibile utilizzare ExecuteScalar(). –

+0

Sì, sta tornando. Cercherò invece di usare una SELEZIONA se rende le cose più facili. – danbroooks

+2

Invia un po 'di codice. – Khan

risposta

15

Supponendo di avere una stored procedure come questo che seleziona uno 0 (tabella non esiste) o 1 (tabella esiste)

CREATE PROCEDURE dbo.DoesTableExist (@TableName NVARCHAR(100)) 
AS 
BEGIN 
    IF EXISTS (SELECT * FROM sys.tables WHERE Name = @TableName) 
     SELECT 1 
    ELSE 
     SELECT 0 
END 

allora si può scrivere questo codice C# per ottenere il valore - uso .ExecuteScalar() dal momento che ci si aspetta una sola riga, una colonna singola:

// set up connection and command 
using (SqlConnection conn = new SqlConnection("your-connection-string-here")) 
using (SqlCommand cmd = new SqlCommand("dbo.DoesTableExist", conn)) 
{ 
    // define command to be stored procedure 
    cmd.CommandType = CommandType.StoredProcedure; 

    // add parameter 
    cmd.Parameters.Add("@TableName", SqlDbType.NVarChar, 100).Value = "your-table-name-here"; 

    // open connection, execute command, close connection 
    conn.Open(); 
    int result = (int)cmd.ExecuteScalar(); 
    conn.Close(); 
} 

Ora result conterrà sia una 0 se la tabella non esiste - o 1, se esiste.

+1

Questo è più pulito. –

+1

in confronto per restituire il parametro, è una buona pratica? – Muflix

1

Utilizzare questa:

var returnParameter = cmd.Parameters.Add("@ReturnVal", SqlDbType.Int); 
returnParameter.Direction = ParameterDirection.ReturnValue; 

la stored procedure deve restituire 0 o 1.

Problemi correlati