Vb.net 如何使用firebird参数和条件进行查询
我试图在单个按钮上构建一个函数,根据在多个组合框中所做的选择来搜索我的数据库。我有四个组合框,可以为null或值。我的最终结果应该是能够通过增强组合框过滤datagridview,从而获得动态和串联查询Vb.net 如何使用firebird参数和条件进行查询,vb.net,firebird,firebird-.net-provider,Vb.net,Firebird,Firebird .net Provider,我试图在单个按钮上构建一个函数,根据在多个组合框中所做的选择来搜索我的数据库。我有四个组合框,可以为null或值。我的最终结果应该是能够通过增强组合框过滤datagridview,从而获得动态和串联查询 Private Sub Button10_Click_1(sender As Object, e As EventArgs) Handles Button10.Click Dim conn As New FbConnection("User=SYSDBA;Password=mast
Private Sub Button10_Click_1(sender As Object, e As EventArgs) Handles Button10.Click
Dim conn As New
FbConnection("User=SYSDBA;Password=masterkey;Database=..\DB.gdb;DataSource=localhost;Port=3050;Dialect=3;Charset=NONE;Role=;Connection lifetime=15;Pooling=true;MinPoolSize=0;MaxPoolSize=50;Packet Size=8192;ServerType=0;")
Dim startdate As String = DateTimePicker1.Value.ToString("dd.MM.yyyy")
Dim enddate As String = Microsoft.VisualBasic.DateAdd(DateInterval.Day, 1, DateTimePicker2.Value).ToString("dd.MM.yyyy")
Dim adapter As New FbDataAdapter("SELECT * from ORDER WHERE DATEORDER BETWEEN @StartDate AND @EndDate AND ZIPCODE = CASE WHEN @Param1 IS NULL THEN ZIPCODE ELSE @Param1 END ", conn)
adapter.SelectCommand.Parameters.AddWithValue("@Param1", ComboBox5.Text)
adapter.SelectCommand.Parameters.AddWithValue("@Param2", ComboBox3.Text)
Dim table As New DataTable
adapter.Fill(table)
DataGridView1.DataSource = table
End Sub
通常,您可以使用以下可选参数编写查询:
Dim query=“选择*
从MyTable
其中(@Column1为NULL或Column1=@Column1)
和(@Column2为NULL或Column2=@Column2)”
Dim命令作为新的SqlCommand(查询、连接)
使用command.Parameters
.Add(“@Column1”,SqlDbType.VarChar,50).Value=If(ComboBox1.SelectedItem为Nothing,CObj(DBNull.Value),ComboBox1.Text)
.Add(“@Column2”,SqlDbType.VarChar,50).Value=If(ComboBox2.SelectedItem为Nothing,CObj(DBNull.Value),ComboBox2.Text)
以
如果在组合框中未选择任何项目,则相应的参数将设置为NULL,且相应的条件与所有记录匹配,从而有效地忽略该参数
上面的代码是为SQL Server编写的,我没有使用Firebird,因此我不确定具体的细节会发生什么变化,但这一原则适用于任何数据库。如果Firebird提供程序不支持命名参数(Access数据库就是这种情况),那么需要做的一个更改是,您需要为每列添加两个参数,而不是一个,例如
Dim query=“选择*
从MyTable
其中(@Column1A为空或Column1=@Column1B)
和(@Column2A为空或Column2=@Column2B)”
Dim命令作为新的SqlCommand(查询、连接)
使用command.Parameters
.Add(“@Column1A”,SqlDbType.VarChar,50).Value=If(ComboBox1.SelectedItem为Nothing,CObj(DBNull.Value),ComboBox1.Text)
.Add(“@Column1B”,SqlDbType.VarChar,50).Value=If(ComboBox1.SelectedItem为Nothing,CObj(DBNull.Value),ComboBox1.Text)
.Add(“@Column2A”,SqlDbType.VarChar,50).Value=If(ComboBox2.SelectedItem为Nothing,CObj(DBNull.Value),ComboBox2.Text)
.Add(“@Column2B”,SqlDbType.VarChar,50).Value=If(ComboBox2.SelectedItem为Nothing,CObj(DBNull.Value),ComboBox2.Text)
以
通常,您可以使用以下可选参数编写查询:
Dim query=“选择*
从MyTable
其中(@Column1为NULL或Column1=@Column1)
和(@Column2为NULL或Column2=@Column2)”
Dim命令作为新的SqlCommand(查询、连接)
使用command.Parameters
.Add(“@Column1”,SqlDbType.VarChar,50).Value=If(ComboBox1.SelectedItem为Nothing,CObj(DBNull.Value),ComboBox1.Text)
.Add(“@Column2”,SqlDbType.VarChar,50).Value=If(ComboBox2.SelectedItem为Nothing,CObj(DBNull.Value),ComboBox2.Text)
以
如果在组合框中未选择任何项目,则相应的参数将设置为NULL,且相应的条件与所有记录匹配,从而有效地忽略该参数
上面的代码是为SQL Server编写的,我没有使用Firebird,因此我不确定具体的细节会发生什么变化,但这一原则适用于任何数据库。如果Firebird提供程序不支持命名参数(Access数据库就是这种情况),那么需要做的一个更改是,您需要为每列添加两个参数,而不是一个,例如
Dim query=“选择*
从MyTable
其中(@Column1A为空或Column1=@Column1B)
和(@Column2A为空或Column2=@Column2B)”
Dim命令作为新的SqlCommand(查询、连接)
使用command.Parameters
.Add(“@Column1A”,SqlDbType.VarChar,50).Value=If(ComboBox1.SelectedItem为Nothing,CObj(DBNull.Value),ComboBox1.Text)
.Add(“@Column1B”,SqlDbType.VarChar,50).Value=If(ComboBox1.SelectedItem为Nothing,CObj(DBNull.Value),ComboBox1.Text)
.Add(“@Column2A”,SqlDbType.VarChar,50).Value=If(ComboBox2.SelectedItem为Nothing,CObj(DBNull.Value),ComboBox2.Text)
.Add(“@Column2B”,SqlDbType.VarChar,50).Value=If(ComboBox2.SelectedItem为Nothing,CObj(DBNull.Value),ComboBox2.Text)
以