我使用过这段代码:
SQL中的存储过程:
Alter PROCEDURE [dbo].[Get_Customize_Status_By_OrderId]
@Order_id varchar(50)
AS
BEGIN
select Customize_Status from dbo.ClientOrder where Order_id=@Order_id
END
GO
在c#中调用该存储过程:
public static bool getcustomizestatusbyorderid(string orderid)
{
bool result = false;
try
{
Database db = new SqlDatabase(connectionstring);
DbCommand cmd1 = db.GetStoredProcCommand("[dbo].[Get_Customize_Status_By_OrderId]");
db.AddInParameter(cmd1, "@Order_id",DbType.String,orderid);
int RowAffected = db.ExecuteScalar(cmd1);
}
catch (Exception ex)
{
}
}
请告诉我如何在c#中获得customize_status
值?
答案 0 :(得分:1)
ExecuteScalar
会返回所选的第一个单元格,因此在您的示例中将返回的内容;您应该只需要从object
(which is what ExecuteScalar
returns)投射到int
:
int status = (int)db.ExecuteScalar(cmd1);
(假设Customize_Status
是int
等)
请注意,您可能需要检查由零行产生的null
:
object result = db.ExecuteScalar(cmd1);
if(result == null) {
// no rows
} else if (result is DBNull) {
// at least one row; first cell was a database null
} else {
// at least one row; first cell was non-null
int status = (int)result;
// ...
}
“受影响的行”让我觉得你与ExecuteNonQuery
混淆了,坦率地说,返回值很少有意义无论如何。
另外:ent-lib?真? 为什么?
答案 1 :(得分:0)
你可以这样做
bool exists = (int)db.ExecuteScalar(cmd1) == 1;
return exists;
答案 2 :(得分:0)
试试这个
bool customize_status = (RowAffected > 0);
如果找到记录,则会返回true
答案 3 :(得分:0)
要以可以理解的方式将布尔值返回到C#前端,我会这样做:
SELECT CASE WHEN Customize_Status = 0 THEN 'false' ELSE 'true' END AS [Customize_Status]
然后,不管你如何掌握前端的数据,你都可以写(让我们假装你把它作为数据加载器数据行中的值返回)...
bool Customize_Status = Convert.ToBoolean(dr["Customize_Status"].ToString());
这是我发现从SQL Server数据库和C#前端获取bool的唯一方法,因此可以将其分配给bool。