当我尝试运行它时,它会给我以下错误消息:
将varchar值'category_id'转换为数据类型int时,转换失败。
这是我的SQL和参数代码,我认为它应该可以工作,但事实并非如此。
mycmd.CommandText="SELECT * FROM categories WHERE @db_property = @property_id";
// This contains a string "category_id", which is correct.
mycmd.Parameters.Add("@db_property", SqlDbType.VarChar).Value=db_property_field;
// This contains an Int, referring to the category_id in database. As of now, this is 1
mycmd.Parameters.Add("@property_id", SqlDbType.Int).Value=property_id;
在我浏览此代码后,我通过Reader运行它,这就是我收到上面的错误消息的地方。一直问老师,我班上优秀的学生,没有人能找到问题所在的线索。
答案 0 :(得分:6)
您不应将字段名称添加为参数。尝试更改脚本以包含实际字段ID:
mycmd.CommandText = "SELECT * FROM categories WHERE category_id = @property_id";
mycmd.Parameters.Add("@property_id", SqlDbType.Int).Value = property_id;
答案 1 :(得分:0)
我不确定你的结构,但请尝试以下方法:
mycmd.CommandText = "SELECT * FROM categories WHERE Cast(@db_property as Int) = @property_id";
答案 2 :(得分:0)
您的查询与您传入的两个变量匹配,因此它将返回所有数据或不返回任何数据!最重要的是,您将char变量与int匹配。 SQL将尝试将char变量强制转换为int。
@db_property = @property_id
你的查询应该是这样吗?
SELECT * FROM categories WHERE db_property = @db_property AND property_id = @property_id
答案 3 :(得分:0)
如果你看一下你的陈述,你就是在比较这两个参数。 WHERE子句不在表列(“categories”)上,并且您传递的两个参数是不同的数据类型。 VarChar和Int。执行该命令时,SQL引擎正在尝试比较不同数据类型的两个变量。
如果直接针对SQL运行以下SQL语句,您将收到相同的错误。
DECLARE @Var1 VARCHAR(100)
DECLARE @Var2 INT
SELECT @Var1 = 'Test', @Var2 = 1
SELECT * FROM dbo.categories WHERE @Var1 = @Var2
答案 4 :(得分:-1)
您可以从以下地址获得解决方案:
http://net-informations.com/csprj/data-providers/cs-procedure-parameter.htm
为了您的信息,我只需重塑代码并将其用于我的需求。
存储过程代码如下:
Create PROCEDURE [dbo].[PmSPValidate]
@a varchar(10)
AS
BEGIN
(SELECT AcctDsc,AcctAge
FROM dbo.tblCoa
WHERE AcctNo >= @a)
END
Code of C# :
private void btnThirdTrial_Click(object sender, EventArgs e)
{
string connetionString = null;
SqlConnection connection;
SqlDataAdapter adapter;
SqlCommand command = new SqlCommand();
SqlParameter param;
DataSet ds = new DataSet();
int i = 0;
connetionString = "Data Source=FIN03;Initial Catalog=CmsTest;Integrated Security=True";
connection = new SqlConnection(connetionString);
connection.Open();
command.Connection = connection;
command.CommandType = CommandType.StoredProcedure;
command.CommandText = "dbo.PmSPValidate";
param = new SqlParameter("@a",Account.Text.ToString ());
param.Direction = ParameterDirection.Input;
param.DbType = DbType.String;
command.Parameters.Add(param);
adapter = new SqlDataAdapter(command);
adapter.Fill(ds);
for (i = 0; i <= ds.Tables[0].Rows.Count - 1; i++)
{
MessageBox.Show(" Name " + ds.Tables[0].Rows[i][0].ToString() + " Age " + ds.Tables[0].Rows[i][1].ToString());
}
connection.Close();
}