我创建了一个存储过程,它接受一个参数,一个表的名称,如果数据库中存在则返回1,否则返回0。在SQL Server Management Studio测试中,我的存储过程完全按照我的意愿工作,但是我无法在C#程序中使用该值。
我的选项似乎是ExecuteScalar()
,ExecuteNonQuery()
或ExecuteReader()
,这些选项似乎都不适合该任务,也无法让它们检索我的存储过程的结果。
我尝试再次使用cmd.Parameters.AddWithValue
和cmd.Parameters.Add
分配我的参数无效。
答案 0 :(得分:16)
假设您有一个这样的存储过程,它选择0(表不存在)或1(表存在)
CREATE PROCEDURE dbo.DoesTableExist (@TableName NVARCHAR(100))
AS
BEGIN
IF EXISTS (SELECT * FROM sys.tables WHERE Name = @TableName)
SELECT 1
ELSE
SELECT 0
END
然后你可以编写这个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
将包含{{1}}。
答案 1 :(得分:1)
使用此:
var returnParameter = cmd.Parameters.Add("@ReturnVal", SqlDbType.Int);
returnParameter.Direction = ParameterDirection.ReturnValue;
您的存储过程应返回0或1。