Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如果表存在,则返回布尔值的SQL Server存储过程,c#实现_C#_Sql Server_Stored Procedures - Fatal编程技术网

如果表存在,则返回布尔值的SQL Server存储过程,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

我创建了一个存储过程,它接受一个参数,即表名,如果数据库中存在,则返回1,如果不存在,则返回0。在SQLServerManagementStudio测试中,我的存储过程完全按照我所希望的方式工作,但是我很难在我的C#程序中使用该值

我的选项似乎是
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;