这是一个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;
}
答案 0 :(得分:0)
使用存储过程只会为您提供另一个表。如果您正在使用数据集设计器,只需创建一个新的tableadapter并使用存储过程作为select语句。
如果这不是您的要求,请使用一些代码更新您的问题。
答案 1 :(得分:0)
代码很简单。暗示您的SQLCommand称为myCommand
将myCommand.Text
更改为存储过程的名称。
将myCommand.CommandType
更改为CommandType.StoredProcedure
。
对于存储过程中的每个参数,请使用以下行:
myCommand.Parameters.AddWithCalue("@YourSQLParameter",YourValue)
我喜欢使用DataReaders
进行此类操作。
SQLDataReader myReader = myCommand.ExecuteReader();
现在假设你要将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();