【问题标题】:How to Pass Bool (BIT) parameter to SQL server?如何将 Bool (BIT) 参数传递给 SQL 服务器?
【发布时间】:2014-04-21 03:47:44
【问题描述】:

我在sql中有一个存储过程,它有一个位参数。我需要从c#传递参数值。有人可以帮我怎么做。我将真/假值传递给位参数,但它不起作用。

CREATE PROCEDURE checkbit
      @id varchar(10),
@IsDeleted bit
AS
BEGIN

IF(@IsDeleted = 1)
    BEGIN
        DELETE FROM tablename WHERE ID = @id

        RETURN
    END
END

我的 C# 代码

我正在使用实体框架。在这里检查位值。

bool chk;
if(val==1)
 chk=true;
else
 chk=false;
context.checkbit(id,chk)  

【问题讨论】:

  • 通常会发布您的代码...
  • 对于未来的问题,在原始问题中包含详细信息非常重要。为了回答这个问题,您需要使用实体这一事实

标签: c# asp.net sql


【解决方案1】:

您可以只使用01 作为BIT 字段

  • 1TRUE
  • 0FALSE

context.checkbit(id,val);// ? 1 : 0;

【讨论】:

  • 我在这里使用实体框架。我使用了真/假但它不起作用。
  • 你看我的回答了吗?我说使用 numbers 01
  • SQL Server 为什么要这样做?我一直在用头撞墙,试图找出为什么我的比特值没有更新。我将值设置为true,它执行没有错误,但数据库一直显示0
  • 是的,对于 SQL Server,没有真假之类的东西,只有位值
  • 现在有了吗?类似于 SQL Server 的“真”和“假”。它会为您将这些字符转换为 0 或 1。 here
【解决方案2】:

如果您使用 Ado.net,请尝试以下操作,希望它会起作用。

SqlParameter param = new SqlParameter();
             param.ParameterName = "@Isstatus";
             param.Value = Isstatus;
             param.DbType = System.Data.DbType.Boolean
             cmd.Parameters.Add(param);

实体框架

如果您的 sp 返回 true 或 false,那么下面您可以使用其他方式,您需要尝试使用 void。

using System.Data.Entity.Infrastructure;
using System.Data.Objects;

    public virtual bool Deletecustomer(int id ,bool IsDeleted )
    {
        return ((IObjectContextAdapter)this).ObjectContext.ExecuteStoreQuery<bool>("EXEC checkbit({0},{1})", id,IsDeleted ).SingleOrDefault();
    }

【讨论】:

    猜你喜欢
    • 2023-03-14
    • 2022-08-19
    • 1970-01-01
    • 2021-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多