【问题标题】:SQL Server stored procedure that returns a boolean if table exists, c# implementation如果表存在则返回布尔值的SQL Server存储过程,c#实现
【发布时间】:2013-07-23 19:43:47
【问题描述】:

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

我的选项似乎是 ExecuteScalar()ExecuteNonQuery()ExecuteReader(),这些选项似乎都不适合该任务,我什至无法让它们检索我的存储过程的结果。

我已尝试再次使用 cmd.Parameters.AddWithValuecmd.Parameters.Add 分配我的参数,但无济于事。

【问题讨论】:

  • 你的存储过程是返回还是选择结果?如果您“选择 TableExists=1”而不是“返回 1”会更容易。然后你可以使用 ExecuteScalar()。
  • 是的,它正在返回。如果它使事情变得更容易,我会考虑使用 SELECT。
  • 我更喜欢输出参数。但这是个人喜好。看这个答案。但是“是”对“使用 SELECT”stackoverflow.com/questions/10905782/…
  • marc_s 的答案是。

标签: c# sql-server stored-procedures


【解决方案1】:

假设您有一个像这样的存储过程,它选择 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

然后您可以编写此 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();
}

现在result 将包含0(如果表不存在)或1(如果存在)。

【讨论】:

  • 是的,如果您在 c# 中返回布尔值,则需要将结果转换为位
【解决方案2】:

使用这个:

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

您的存储过程应该返回 0 或 1。

【讨论】:

    猜你喜欢
    • 2010-11-23
    • 1970-01-01
    • 2023-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-17
    相关资源
    最近更新 更多