更改从表到存储过程的数据集绑定

时间:2012-07-03 14:06:28

标签: c# data-binding dataset

这是一个Windows应用程序。 最初我有一个表格下拉菜单的数据集。现在我想使用存储过程。如何修改代码中的进程?

我认为最好的方法是删除数据集并重新创建新的数据集。但我们可以在设计师代码中做到吗?

感谢。

修改

  protected Problem_DE_DataSet(global::System.Runtime.Serialization.SerializationInfo info, global::System.Runtime.Serialization.StreamingContext context) : 
            base(info, context, false) {
        if ((this.IsBinarySerialized(info, context) == true)) {
            this.InitVars(false);
            global::System.ComponentModel.CollectionChangeEventHandler schemaChangedHandler1 = new global::System.ComponentModel.CollectionChangeEventHandler(this.SchemaChanged);
            this.Tables.CollectionChanged += schemaChangedHandler1;
            this.Relations.CollectionChanged += schemaChangedHandler1;
            return;
        }
        string strSchema = ((string)(info.GetValue("XmlSchema", typeof(string))));
        if ((this.DetermineSchemaSerializationMode(info, context) == global::System.Data.SchemaSerializationMode.IncludeSchema)) {
            global::System.Data.DataSet ds = new global::System.Data.DataSet();
            ds.ReadXmlSchema(new global::System.Xml.XmlTextReader(new global::System.IO.StringReader(strSchema)));
            if ((ds.Tables["Problem_DE"] != null)) {
                base.Tables.Add(new Problem_DEDataTable(ds.Tables["Problem_DE"]));
            }
            this.DataSetName = ds.DataSetName;
            this.Prefix = ds.Prefix;
            this.Namespace = ds.Namespace;
            this.Locale = ds.Locale;
            this.CaseSensitive = ds.CaseSensitive;
            this.EnforceConstraints = ds.EnforceConstraints;
            this.Merge(ds, false, global::System.Data.MissingSchemaAction.Add);
            this.InitVars();
        }
        else {
            this.ReadXmlSchema(new global::System.Xml.XmlTextReader(new global::System.IO.StringReader(strSchema)));
        }
        this.GetSerializationData(info, context);
        global::System.ComponentModel.CollectionChangeEventHandler schemaChangedHandler = new global::System.ComponentModel.CollectionChangeEventHandler(this.SchemaChanged);
        base.Tables.CollectionChanged += schemaChangedHandler;
        this.Relations.CollectionChanged += schemaChangedHandler;
    }

2 个答案:

答案 0 :(得分:0)

使用存储过程只会为您提供另一个表。如果您正在使用数据集设计器,只需创建一个新的tableadapter并使用存储过程作为select语句。

如果这不是您的要求,请使用一些代码更新您的问题。

答案 1 :(得分:0)

代码很简单。暗示您的SQLCommand称为myCommand

  • myCommand.Text更改为存储过程的名称。

  • myCommand.CommandType更改为CommandType.StoredProcedure

对于存储过程中的每个参数,请使用以下行:

  • myCommand.Parameters.AddWithCalue("@YourSQLParameter",YourValue)

我喜欢使用DataReaders进行此类操作。

  • SQLDataReader myReader = myCommand.ExecuteReader();
瞧!瞧!你已经执行了StoredProcedure。

现在假设你要将sotred程序的结果添加到ComboBox

  • while (myReader.Read()) { myComboBox.Items.Add(myReader["ColumnName"].Tostring(); }

基本的例子,但我相信你明白了。如果您需要更多信息,可以随时阅读this tutorial,它可以解释您想要的内容。

更新:

你在那里发布的生成代码很乱,但方法仍然相同。根据我的理解,您只想使用存储过程从表中读取并使用某个字段填充ComboBox或DropDownList。您应该尝试在代码部分从头开始键入它,而不使用此设计器来了解它的工作原理。

你应该有这样的东西:

        //Creates a connection to your DataBase
        SqlConnection myConnection = new SqlConnection(@"Server=YOURSERVER;Database=YOURDATABASE;User id=YOURID; Password=YOURPASSWORD");
        //Opens the connection
        myConnection.Open();
        //Creates a command (Query)
        SqlCommand myCommand = myConnection.CreateCommand();
        //Sets the type of query to Stored Procedure (EXEC ...)
        myCommand.CommandType = CommandType.StoredProcedure;
        //The Query is set to stored procedure so (EXEC THE_NAME_OF_YOU_STOREDPROCEDURE)
        myCommand.CommandText = "THE_NAME_OF_YOUR_STOREDPROCEDURE";

        //This will add each parameter to your query (EXEC THE_NAME_OF_YOURSTOREDPROCEDURE @YOURPARAMETER
        myCommand.Parameters.AddWithValue("@YOURPARAMETER", THE_VALUE_OF_THE_PARAMETER);
        SqlDataReader myReader = myCommand.ExecuteReader();

        //For each records returned the item from the ["YOURCOLUMN"] will be added to the comboBox
        while(myReader.Read())
        {
          myComboBox.Items.Add(myReader["YOUR_COLUMN_NAME"]);
        }
        myReader.Close();
        myConnection.Close();