SQL Server存储过程返回一个boolean if表存在,c#implementation

dan*_*oks 7 c# sql-server stored-procedures

我创建了一个存储过程,它接受一个参数,一个表的名称,如果数据库中存在则返回1,否则返回0.在SQL Server Management Studio测试中,我的存储过程完全按照我的意愿工作,但是我无法在C#程序中使用该值.

我的选择似乎是ExecuteScalar(),ExecuteNonQuery()或者ExecuteReader(),似乎都不适合任务,也不能让他们甚至检索我的存储过程的结果.

我已经尝试用两者分配我的参数cmd.Parameters.AddWithValuecmd.Parameters.Add再次无效.

mar*_*c_s 17

假设您有一个这样的存储过程,它选择0(表不存在)或1(表存在)

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

然后你可以编写这个C#代码来获取值 - 使用,.ExecuteScalar()因为你只期望一行,单列:

// 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();
}
Run Code Online (Sandbox Code Playgroud)

现在result将包含a 01,如果表不存在 - 或者,如果它确实存在.

  • 这比较干净. (2认同)