我有问题,我真的需要你的帮助。请尽快帮助我。这是我的故事。我在Visual Studio中为我的项目创建了一个本地数据库。我的意思是我右键单击我的项目并选择添加并将服务基础数据库添加到名为OCRDataBase
的项目中。
我的第一个问题是:我在Visual Studio的Server Explorer菜单中为我的数据库创建了这个存储过程
CREATE PROCEDURE [dbo].[CheckDataBase]
@Shape int ,
@p1 int ,
@p2 int ,
@p3 int ,
@p4 int ,
@output nvarchar(10) out
as
Begin
select
@output = [Character]
from
dbo.OCRTable
where
Style = @Shape
and Part1 = @p1 and Part2 = @p2 and Part3 = @p3 and Part4 = @p4;
if(@output is null)
select @output = '[Unknown]';
End
我有一个包含6列(id, style, part1, part2, part3, part4
,字符)的表。
这个存储过程应该返回字符,如果没有任何字符与存储过程条件相匹配,它会返回' [Unknown]';
我在Visual Studio中编写此函数以获取此存储过程返回的值
static public string Check(int Shape, int p1, int p2, int p3, int p4)
{
string FunctionOutput = "";
try
{
Connection.Open();
SqlCommand SqlCommands = new SqlCommand("[dbo].[CheckDataBase]", Connection);
SqlCommands.CommandType = CommandType.StoredProcedure;
SqlCommands.Parameters.AddWithValue("@Shape", Shape);
SqlCommands.Parameters.AddWithValue("@p1", p1);
SqlCommands.Parameters.AddWithValue("@p2", p2);
SqlCommands.Parameters.AddWithValue("@p3", p3);
SqlCommands.Parameters.AddWithValue("@p4", p4);
SqlParameter OutputParameter = new SqlParameter();
OutputParameter.ParameterName = "@output";
OutputParameter.SqlDbType = SqlDbType.NVarChar;
OutputParameter.Direction = ParameterDirection.Output;
SqlCommands.Parameters.Add(OutputParameter);
SqlCommands.ExecuteNonQuery();
FunctionOutput = OutputParameter.Value.ToString();
MessageBox.Show(FunctionOutput);
}
catch (SqlException exception)
{
MessageBox.Show(exception.ToString());
}
finally
{
Connection.Close();
}
return FunctionOutput;
}
但是当SqlCommand.ExecuteNonQuery();
执行时,会显示以下消息:
未处理的类型' System.InvalidOperationException'发生在System.Data.dll
中附加信息:String [5]:Size属性的大小无效。
我该怎么办?请帮帮我。
我的第二个问题是如何为该数据库提供相对地址,以便我可以从任何文件夹和任何计算机运行我的应用程序。
这是我的数据库连接:
static private SqlConnection Connection = new SqlConnection(@"Data Source=(LocalDB)\v11.0;AttachDbFilename=D:\Modem Project\PROJECT\OCR\OCR\OCRDataBase.mdf;Integrated Security=True");
我尝试写
..\..\OCRDataBase.mdf instead of D:\Modem Project\PROJECT\OCR\OCR\OCRDataBase.mdf
但这是Visual Studio消息:
此文件夹中已存在具有该名称的数据库。
似乎Visual Studio想要替换它。
感谢您的帮助。
答案 0 :(得分:0)
根据MSDN,
对于具有可变长度类型的输出参数(nvarchar,for 例如),参数的大小定义了缓冲区的大小 保持输出参数。输出参数可以截断为 用Size指定的大小。对于字符类型,指定的大小 大小以字符为单位。
在您的情况下,您尝试从存储过程返回nvarchar
,因此请尝试设置这样的大小,
SqlParameter OutputParameter = new SqlParameter();
OutputParameter.ParameterName = "@output";
OutputParameter.SqlDbType = SqlDbType.NVarChar;
OutputParameter.Direction = ParameterDirection.Output;
OutputParameter.Size = 10;
SqlCommands.Parameters.Add(OutputParameter);