gpt4 book ai didi

c#-4.0 - FirebirdSql 中参数的正确使用

转载 作者:行者123 更新时间:2023-12-02 09:10:12 24 4
gpt4 key购买 nike

我想知道是否有人可以提供以下帮助。

using (FbConnection conn = new FbConnection(ConnectionString))
{
conn.Open();

// --------------------------------------------------------------------------
FbCommand command1 = new FbCommand("SELECT @AN_INT FROM RDB$DATABASE", conn);
command1.Parameters.Add("AN_INT", FbDbType.Integer);
try
{
command1.Prepare(); // Message=Dynamic SQL Error
//SQL error code = -804
//Data type unknown
// Source=FirebirdSql.Data.FirebirdClient
// ErrorCode=335544569
// SQLSTATE=42000
}
catch(Exception E)
{
MessageBox.Show(E.Message);
}
// --------------------------------------------------------------------------
FbCommand command2 = new FbCommand("SELECT 123 FROM RDB$DATABASE WHERE 789 >= @AN_INT", conn);
command2.Parameters.Add("AN_INT", FbDbType.Integer);
try
{
command2.Prepare(); // No Problem
}
catch (Exception E)
{
MessageBox.Show(E.Message);
}
}

我的问题是这样的 - 我从另一个编码器那里拿起了一个项目,我认为,如果可能的话,我应该更改数据库组件以使用参数化查询;现有的技术是将值注入(inject)到Sql字符串中。任务是重构一个类以在现有项目中工作。

上面的代码示例演示了我必须解决的一个问题,并且我想知道还有其他问题。本质上,问题是创建一个将字符串转换为参数化查询的类。有人这样做过吗?一路上可能有什么陷阱或技巧?

最佳答案

您的第一个查询需要是SELECT cast(@AN_INT as int) FROM RDB$DATABASE。否则 Firebird 不知道参数类型是什么(即使它是在 C# 代码中指定的)。

你可以尝试直接在Firebird中运行这段代码,看看引擎本身的限制。

execute block
as
begin
execute statement ('select :foobar from rdb$database')(foobar := 10);
end

关于c#-4.0 - FirebirdSql 中参数的正确使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11451412/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com