2013-07-23 46 views
6

Tôi đã tạo một thủ tục lưu trữ lấy một đối số duy nhất, tên bảng và trả về 1 nếu nó tồn tại trong cơ sở dữ liệu, 0 nếu nó không . Trong SQL Server Management Studio thử nghiệm thủ tục lưu trữ của tôi hoạt động chính xác như tôi muốn nó, tuy nhiên tôi gặp khó khăn khi nhận được giá trị đó để sử dụng trong chương trình C# của tôi.Thủ tục lưu sẵn SQL Server trả về một boolean nếu bảng tồn tại, C# implementation

Tùy chọn của tôi có vẻ là ExecuteScalar(), ExecuteNonQuery() hoặc ExecuteReader(), không có cách nào phù hợp với công việc này, cũng như tôi không thể truy xuất kết quả của quy trình được lưu trữ của tôi.

Tôi đã thử gán tham số của mình với cả hai lần cmd.Parameters.AddWithValuecmd.Parameters.Add một lần nữa để không có kết quả.

+1

là thủ tục lưu trữ của bạn trở lại hoặc chọn kết quả? Sẽ dễ dàng hơn nếu bạn "chọn TableExists = 1" thay vì "return 1". Sau đó, bạn có thể sử dụng ExecuteScalar(). –

+0

Có nó đang quay trở lại. Tôi sẽ xem xét sử dụng một SELECT thay vì nếu nó làm cho mọi thứ dễ dàng hơn. – danbroooks

+2

Đăng một số mã. – Khan

Trả lời

15

Giả sử bạn có một thủ tục được lưu trữ như thế này mà lựa chọn hoặc là 0 (bảng không tồn tại) hoặc 1 (bảng không tồn tại)

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

sau đó bạn có thể viết C# mã này để có được những giá trị - sử dụng .ExecuteScalar() vì bạn đang mong đợi chỉ một hàng duy nhất, cột duy nhất:

// 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(); 
} 

Bây giờ result sẽ chứa hoặc một 0 nếu bảng không tồn tại - hoặc 1, nếu nó tồn tại.

+1

Điều này sạch hơn. –

+1

so với tham số trả về, đây có phải là cách hay không? – Muflix

1

Sử dụng này:

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

thủ tục lưu trữ của bạn nên trở về 0 hoặc 1.

Các vấn đề liên quan