我正在使用Firebird 2.5和asp.net(4.5)。
我正在尝试找出如何使用insert ...返回或某些等效项。
使用fbDataReader,它执行插入OK,但无论如何我都找不到访问返回的值。使用fbDataReader.GetName(0)似乎工作正常,返回“returns”子句中的变量名称。这甚至适用于子选择中的max(): .....返回(从用户中选择max(userid)作为newid) 返回文本“newid”。 我无法找到价值在哪里或是否可用。
使用fbDataAdaptor填充DataTable,插入工作正常,但数据表似乎为空。
是否有人知道这是否可行,如果可行,该怎么做?
由于
EDIT
提供的代码:
strConn = ....
dbConn = New FirebirdSql.Data.FirebirdClient.FbConnection(strConn)
dbConn.Open()
MySQL = "insert into users (Firstname, Lastname) VALUES (@fname,@lname) returning userid"
FbC = New FirebirdSql.Data.FirebirdClient.FbCommand(MySQL, dbConn)
FbC.Parameters.Add("fname", FirebirdSql.Data.FirebirdClient.FbDbType.Text).Value = "Pete"
FbC.Parameters.Add("lname", FirebirdSql.Data.FirebirdClient.FbDbType.Text).Value = "Davis"
FbDataReader = FbC.ExecuteReader()
FbDataReader.Read()
TextBox1.Text = FbDataReader.GetName(0)
'TextBox1.Text = str(FbDataReader.GetInt64())
'TextBox1.Text = FbDataReader.GetString(0)
TextBox1.Text = FbDataReader.GetValue(0)
答案 0 :(得分:0)
根据this thread INSERT ... RETURNING ...
的行为类似于Firebird .NET提供程序的输出参数。所以你需要添加一个输出参数。
所以类似下面的代码应该有效:
FbParameter outParam = new FbParam("userid", FbDbType.Integer)
{
Direction = ParameterDirection.Output
};
FbC.Parameters.Add(outParam);
FbC.ExecuteNonQuery();
int? userId = outParam.Value as int?;