我有一个函数和一个程序来检查数据库中是否存在记录。当记录存在且0不存在时,假设得到1。我执行了我的程序它工作正常,但在视觉工作室没有工作。我找不到问题 这是我的程序
Create PROCEDURE [dbo].[checkRepititiveModel]
@modelName nvarchar(50)
as
If EXISTS ( SELECT * FROM models WHERE modelName = @modelName)
begin
return 1
end
Else
begin
return 0
end
以下是我的功能:
public int CheckRepetitive(string connectionString,string modelName)
{
SqlCon = new SqlConnection(connectionString);
if (SqlCon.State != ConnectionState.Open)
{
SqlCon.Open();
}
SqlCommand com = new SqlCommand("checkRepititiveModel", SqlCon);
com.Parameters.AddWithValue("@modelName", modelName);
com.CommandType = CommandType.StoredProcedure;
int result = Convert.ToInt32(com.ExecuteScalar());
if (SqlCon.State != ConnectionState.Closed)
{
SqlCon.Close();
}
return result;
}
我查看主要表格中的陈述
int a = Db.CheckRepetitive(ConStr, txtBxModelName.Text);
if (a > 0)
{
MessageBox.Show(a.ToString() + " exist!!");
return;
}
答案 0 :(得分:0)
那是因为你应该选择一些东西,所以ExecuteScalar可以检索你的行集的第一个元素。改变你的SP并做SELECT而不是RETURN。像这样:
ALTER PROCEDURE [dbo].[checkRepititiveModel]
@modelName nvarchar(50)
AS
BEGIN
IF EXISTS (SELECT 1 FROM Catalogo.Maquina WHERE Codigo = @modelName)
SELECT 1
ELSE
SELECT 0
END
答案 1 :(得分:0)
要使用您需要创建参数的过程的返回值,请绑定到ReturnValue
方向。
另外,你真的应该在函数本地连接并使用using
语句处理它。
public int CheckRepetitive(string connectionString,string modelName)
{
using(var sqlCon = new SqlConnection(connectionString))
{
sqlCon.Open();
SqlCommand com = new SqlCommand("checkRepititiveModel", sqlCon);
com.Parameters.Add("@modelName", SqlDbType.NVarChar).Value = modelName;
SqlParameter retval = sqlcomm.Parameters.Add("@rc", SqlDbType.Int);
retval.Direction = ParameterDirection.ReturnValue;
com.CommandType = CommandType.StoredProcedure;
com.ExecuteNonQuery();
return (int)retval.Value;
}
}