Sk9*_*k93 10 sql sql-server stored-procedures user-defined-functions
我要求对数据库运行查询,该数据库将返回零或一(检查特定条件的存在).我已经获得审查的技术规范声明我应该创建一个存储过程,它将返回一行,其中一个名为"result"的列将包含一个0或1的位值.但是,我我不确定存储过程是否是最好的方法,但我有点不确定所以以为我会问你的意见.我能想到的两个选择是:
1:创建一个SQL标量值函数,该函数执行查询并返回一个位.然后可以使用"TEXT"SqlCommand对象直接从.Net客户端应用程序中调用它,它将从"ExecuteScalar()"方法返回一个bool.
2:按照技术规范中的描述创建存储过程.然后以正常方式从.Net客户端应用程序调用此方法,并返回包含位值的单行和单列的DataTable.
对我来说,选项一似乎是最好的.然而,在我脑后的一些事情是说这不是一个好主意.
请您提出您的意见并帮助减轻我的疑虑?:)
干杯,伊恩
cod*_*ger 14
使用ExecuteScalar()方法执行存储过程.然后,您可以将此结果转换为布尔值.
例如
SqlConnection con = new SqlConnection(connectionString);
SqlCommand com = new SqlCommand("Execute dbo.usp_MyStoredProc", con);
return (Boolean)com.ExecuteScalar();
Run Code Online (Sandbox Code Playgroud)
小智 9
这对我有用,并且基于这个答案/sf/answers/226278951/使用SqlDataAdapter(请注意,您不需要使用)和ExecuteScalar(可以使用如下所示的ExecuteNonQuery):
bool res = false;
using (SqlConnection conn = new SqlConnection(GetConnectionString()))
{
using (SqlCommand comm = new SqlCommand("dbo.MyFunction", conn))
{
comm.CommandType = CommandType.StoredProcedure;
SqlParameter p1 = new SqlParameter("@MyParam", SqlDbType.Int);
// You can call the return value parameter anything, .e.g. "@Result".
SqlParameter p2 = new SqlParameter("@Result", SqlDbType.Bit);
p1.Direction = ParameterDirection.Input;
p2.Direction = ParameterDirection.ReturnValue;
p1.Value = myParamVal;
comm.Parameters.Add(p1);
comm.Parameters.Add(p2);
conn.Open();
comm.ExecuteNonQuery();
if (p2.Value != DBNull.Value)
res = (bool)p2.Value;
}
}
return res;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
71508 次 |
| 最近记录: |