如果表存在,则返回布尔值的SQL Server存储过程,c#实现
我创建了一个存储过程,它接受一个参数,即表名,如果数据库中存在,则返回1,如果不存在,则返回0。在SQLServerManagementStudio测试中,我的存储过程完全按照我所希望的方式工作,但是我很难在我的C#程序中使用该值 我的选项似乎是如果表存在,则返回布尔值的SQL Server存储过程,c#实现,c#,sql-server,stored-procedures,C#,Sql Server,Stored Procedures,我创建了一个存储过程,它接受一个参数,即表名,如果数据库中存在,则返回1,如果不存在,则返回0。在SQLServerManagementStudio测试中,我的存储过程完全按照我所希望的方式工作,但是我很难在我的C#程序中使用该值 我的选项似乎是ExecuteScalar()、ExecuteNonQuery()或ExecuteReader(),这些选项似乎都不适合该任务,我甚至无法让它们检索存储过程的结果 我已尝试将cmd.Parameters.AddWithValue和cmd.Paramete
ExecuteScalar()
、ExecuteNonQuery()
或ExecuteReader()
,这些选项似乎都不适合该任务,我甚至无法让它们检索存储过程的结果
我已尝试将
cmd.Parameters.AddWithValue
和cmd.Parameters.Add
都分配给我的参数,但没有效果。假设您有这样一个存储过程,它选择0(表不存在)或1(表确实存在)
然后您可以编写此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
(如果它存在)。使用以下方法:
var returnParameter = cmd.Parameters.Add("@ReturnVal", SqlDbType.Int);
returnParameter.Direction = ParameterDirection.ReturnValue;
存储过程应该返回0或1。存储过程是返回还是选择结果?如果您选择“selecttableexists=1”而不是“return1”,则更容易。然后可以使用ExecuteScalar()。是的,它正在返回。如果SELECT让事情变得更简单,我会考虑使用它。我更喜欢输出参数。但这是个人喜好。看看这个问题的答案。但是“使用选择”marc_的答案是“是”。是的,如果在c中返回布尔值,则需要将结果转换为位#
var returnParameter = cmd.Parameters.Add("@ReturnVal", SqlDbType.Int);
returnParameter.Direction = ParameterDirection.ReturnValue;