ORA-01008:并非所有变量都绑定(在带有参数化查询的表适配器中)

时间:2015-12-02 08:18:16

标签: oracle visual-studio parameters datatable tableadapter

环境:

  • Visual Studio 2010(.NET FrameWork 4)
  • ASP.NET Web应用程序
  • Oracle数据库
  • 使用System.Data.OracleClient

    我有一个Web表单,用户可以在我的查询中的每个参数对应的文本框中输入任何数据或不输入任何数据。如果用户输入了没有数据,则文本框将获得“0”值。

这是我的查询:

SELECT "CardNo" , "Name"
FROM CSC.CommercialCardList
WHERE("CardNo"=:CardNo or :CardNo=0) and ("Name"=:Name or :Name=0)

当我右键单击MYDATABASE.xsd面板中tableadaptor的查询,并选择“预览数据”并用“0”填充参数值时,我得到错误(“ORA-01008:并非所有变量都绑定”)

任何人都可以帮助我吗?

- 编辑 -

CardNo = (CardNoTextBox.Text != String.Empty) ? CardNoTextBox.Text : "0";
Name = (NameTextBox.Text != String.Empty) ? NameTextBox.Text : "0";
CommercialCardList.Fill(dt, CardNo,Name);
ds.Tables.Add(dt);

2 个答案:

答案 0 :(得分:0)

您需要将4个变量绑定为代码的一部分。

2 for" CardNo" =:CardNo或:CardNo = 0

2 for" Name" =:Name或:Name = 0

答案 1 :(得分:0)

您必须将命令BindByName设置为true:

1-在OracleCommand中,如下所示

namespace MyTableAdapters
{
    public partial class MyTabTableAdapter
    {
        public bool SetBindByName
        {
            set
            {
                this.Adapter.InsertCommand.BindByName = value;
                this.Adapter.UpdateCommand.BindByName = value;
                this.Adapter.DeleteCommand.BindByName = value;
                foreach (Oracle.DataAccess.Client.OracleCommand cmd in this.CommandCollection)
                {
                    cmd.BindByName = value;
                }
            }
        }
    }
}

2-在如下所示的Tableadaptor中,并调用具有实数值的SetBindByName

export class UserModel {

  // various properties here

  constructor(/*... 9 madatory params*/) {
  }

  // static factory
  static get empty(): UserModel {
    return new UserModel('', '', 0, '', '', '', '', '', '');
  }
}