一个简单的查询修改页,其功能如下: 一个下拉列表选择从data.mdb数据库wenzhang表里的id字段列出各条id号,2个文本框填修改wenzhang表的title和writer字段,一个Command按钮控件update保存,很简单。 控件:dorpdownlist 属性:id: ddlid autopsotback: true
控件:textbox 属性: id: txttitle
控件:textbox 属性:id: txtwriter
控件:button 属性:id: btnsave过程是创建了3个数据库命令对象,一个用来读全部数据cmdgetall,一个用来查询从下拉列表选择的项对应数据库里的id字段的值cmdgetbyid,一个用来update.修改后的数据的cmdupdate.
选择下来列表项后在两个文本框显示title和writer字段,并且可以修改后点btnsave来提交。代码如下: using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;namespace aspnet
{
/// <summary>
/// WebForm2 的摘要说明。
/// </summary>
public class WebForm2 : System.Web.UI.Page
{
protected System.Data.OleDb.OleDbConnection oleDbConnection1;
protected System.Data.OleDb.OleDbCommand cmdgetall;
protected System.Data.OleDb.OleDbCommand cmdgetbyid;
protected System.Data.OleDb.OleDbCommand comupdate;
protected System.Web.UI.WebControls.DropDownList ddlid;
protected System.Web.UI.WebControls.TextBox txttitle;
protected System.Web.UI.WebControls.TextBox txtwriter;
protected System.Web.UI.WebControls.Button btnsave;
private void Page_Load(object sender, System.EventArgs e)
{
if(!IsPostBack)
{
System.Data.OleDb.OleDbDataReader dr;
this.oleDbConnection1.Open();
dr=this.cmdgetall.ExecuteReader();
bool firstrow=true;
while (dr.Read())
{
ddlid.Items.Add(new ListItem(dr[0].ToString()));
if (firstrow)
{
txttitle.Text=(string)dr["title"];
txtwriter.Text=(string)dr["writer"];
firstrow=false;
}
}
dr.Close();
this.oleDbConnection1.Close();
}
} private void ddlid_SelectedIndexChanged(object sender, System.EventArgs e)
{
string id=ddlid.SelectedItem.Text;
this.cmdgetbyid.Parameters["@id"].Value=id;
this.oleDbConnection1.Open();
System.Data.OleDb.OleDbDataReader dr;
dr=this.cmdgetbyid.ExecuteReader(CommandBehavior.SingleRow);
if (dr.Read())
{
txttitle.Text=(string)dr["title"];
txtwriter.Text=(string)dr["writer"];
}
dr.Close();
this.oleDbConnection1.Close();
} private void btnsave_Click(object sender, System.EventArgs e)
{
this.comupdate.Parameters["@id"].Value=ddlid.SelectedItem.Text;
this.comupdate.Parameters["@title"].Value=txttitle.Text;
this.comupdate.Parameters["@writer"].Value=txtwriter.Text;
this.oleDbConnection1.Open();
this.comupdate.ExecuteNonQuery();
this.oleDbConnection1.Close();
} #region Web 窗体设计器生成的代码
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
//
InitializeComponent();
base.OnInit(e);
}
/// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
/// </summary>
private void InitializeComponent()
{
this.oleDbConnection1 = new System.Data.OleDb.OleDbConnection();
this.cmdgetall = new System.Data.OleDb.OleDbCommand();
this.cmdgetbyid = new System.Data.OleDb.OleDbCommand();
this.comupdate = new System.Data.OleDb.OleDbCommand();
//
// oleDbConnection1
//
this.oleDbConnection1.ConnectionString = @"Jet OLEDB:Global Partial Bulk Ops=2;Jet OLEDB:Registry Path=;Jet OLEDB:Database Locking Mode=1;Data Source=""D:\aspnet\data\data.mdb"";Mode=Share Deny None;Jet OLEDB:Engine Type=5;Provider=""Microsoft.Jet.OLEDB.4.0"";Jet OLEDB:System database=;Jet OLEDB:SFP=False;persist security info=False;Extended Properties=;Jet OLEDB:Compact Without Replica Repair=False;Jet OLEDB:Encrypt Database=False;Jet OLEDB:Create System Database=False;Jet OLEDB:Don't Copy Locale on Compact=False;User ID=Admin;Jet OLEDB:Global Bulk Transactions=1";
//
// cmdgetall
//
this.cmdgetall.CommandText = "SELECT * FROM wenzhang";
this.cmdgetall.Connection = this.oleDbConnection1;
//
// cmdgetbyid
//
this.cmdgetbyid.CommandText = "SELECT title, writer FROM wenzhang WHERE (id = @ id)";
this.cmdgetbyid.Connection = this.oleDbConnection1;
//
// comupdate
//
this.comupdate.CommandText = "UPDATE wenzhang SET title = @ title, wrter = @ writer WHERE (id = @ id)";
this.comupdate.Connection = this.oleDbConnection1;
this.ddlid.SelectedIndexChanged += new System.EventHandler(this.ddlid_SelectedIndexChanged);
this.btnsave.Click += new System.EventHandler(this.btnsave_Click);
this.Load += new System.EventHandler(this.Page_Load); }
#endregion
}
}错误如下:“/aspnet”应用程序中的服务器错误。
--------------------------------------------------------------------------------此 OleDbParameterCollection 中未包含带有 ParameterName“@id”的 OleDbParameter。
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 异常详细信息: System.IndexOutOfRangeException: 此 OleDbParameterCollection 中未包含带有 ParameterName“@id”的 OleDbParameter。源错误:
行 52: {
行 53: string id=ddlid.SelectedItem.Text;
行 54: this.cmdgetbyid.Parameters["@id"].Value=id;
行 55: this.oleDbConnection1.Open();
行 56: System.Data.OleDb.OleDbDataReader dr;
源文件: d:\aspnet\webform2.aspx.cs 行: 54 堆栈跟踪:
[IndexOutOfRangeException: 此 OleDbParameterCollection 中未包含带有 ParameterName“@id”的 OleDbParameter。]
System.Data.OleDb.OleDbParameterCollection.RangeCheck(String parameterName) +48
System.Data.OleDb.OleDbParameterCollection.get_Item(String parameterName) +10
aspnet.WebForm2.ddlid_SelectedIndexChanged(Object sender, EventArgs e) in d:\aspnet\webform2.aspx.cs:54
System.Web.UI.WebControls.ListControl.OnSelectedIndexChanged(EventArgs e) +108
System.Web.UI.WebControls.DropDownList.System.Web.UI.IPostBackDataHandler.RaisePostDataChangedEvent() +26
System.Web.UI.Page.RaiseChangedEvents() +115
System.Web.UI.Page.ProcessRequestMain() +1099
--------------------------------------------------------------------------------
版本信息: Microsoft .NET Framework 版本:1.1.4322.2032; ASP.NET 版本:1.1.4322.2032 ·只要一选择列表框中的项或者点按钮提交保存,就会出现上面的错误,
我的wenzhang 表里的id字段是自动编号的整型的主键,会不会是这个用冲突呢?还有 总是说 某某附近的 "@"有错误,无法分析查询和UPDATE文本云云,我的cmdgetbyid 的commandtext属性是:
SELECT title, writer FROM wenzhang WHERE (id = @ id)
cmdupdate 的 commandtext属性是:
UPDATE wenzhang SET title = @ title, wrter = @ writer WHERE (id = @ id)是不是这样句有问题啊?查询生成器的确定按钮就报以上错误呢?
请大家帮帮我,我搞了24个小时以上了,这个问题依然么有解决,好郁闷啊,
我第一次装VS.net 就喜欢上她了,我想把ASP.NET学好,我好孤独,没人教也没人交流,
教教我这个新手吧
控件:textbox 属性: id: txttitle
控件:textbox 属性:id: txtwriter
控件:button 属性:id: btnsave过程是创建了3个数据库命令对象,一个用来读全部数据cmdgetall,一个用来查询从下拉列表选择的项对应数据库里的id字段的值cmdgetbyid,一个用来update.修改后的数据的cmdupdate.
选择下来列表项后在两个文本框显示title和writer字段,并且可以修改后点btnsave来提交。代码如下: using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;namespace aspnet
{
/// <summary>
/// WebForm2 的摘要说明。
/// </summary>
public class WebForm2 : System.Web.UI.Page
{
protected System.Data.OleDb.OleDbConnection oleDbConnection1;
protected System.Data.OleDb.OleDbCommand cmdgetall;
protected System.Data.OleDb.OleDbCommand cmdgetbyid;
protected System.Data.OleDb.OleDbCommand comupdate;
protected System.Web.UI.WebControls.DropDownList ddlid;
protected System.Web.UI.WebControls.TextBox txttitle;
protected System.Web.UI.WebControls.TextBox txtwriter;
protected System.Web.UI.WebControls.Button btnsave;
private void Page_Load(object sender, System.EventArgs e)
{
if(!IsPostBack)
{
System.Data.OleDb.OleDbDataReader dr;
this.oleDbConnection1.Open();
dr=this.cmdgetall.ExecuteReader();
bool firstrow=true;
while (dr.Read())
{
ddlid.Items.Add(new ListItem(dr[0].ToString()));
if (firstrow)
{
txttitle.Text=(string)dr["title"];
txtwriter.Text=(string)dr["writer"];
firstrow=false;
}
}
dr.Close();
this.oleDbConnection1.Close();
}
} private void ddlid_SelectedIndexChanged(object sender, System.EventArgs e)
{
string id=ddlid.SelectedItem.Text;
this.cmdgetbyid.Parameters["@id"].Value=id;
this.oleDbConnection1.Open();
System.Data.OleDb.OleDbDataReader dr;
dr=this.cmdgetbyid.ExecuteReader(CommandBehavior.SingleRow);
if (dr.Read())
{
txttitle.Text=(string)dr["title"];
txtwriter.Text=(string)dr["writer"];
}
dr.Close();
this.oleDbConnection1.Close();
} private void btnsave_Click(object sender, System.EventArgs e)
{
this.comupdate.Parameters["@id"].Value=ddlid.SelectedItem.Text;
this.comupdate.Parameters["@title"].Value=txttitle.Text;
this.comupdate.Parameters["@writer"].Value=txtwriter.Text;
this.oleDbConnection1.Open();
this.comupdate.ExecuteNonQuery();
this.oleDbConnection1.Close();
} #region Web 窗体设计器生成的代码
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
//
InitializeComponent();
base.OnInit(e);
}
/// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
/// </summary>
private void InitializeComponent()
{
this.oleDbConnection1 = new System.Data.OleDb.OleDbConnection();
this.cmdgetall = new System.Data.OleDb.OleDbCommand();
this.cmdgetbyid = new System.Data.OleDb.OleDbCommand();
this.comupdate = new System.Data.OleDb.OleDbCommand();
//
// oleDbConnection1
//
this.oleDbConnection1.ConnectionString = @"Jet OLEDB:Global Partial Bulk Ops=2;Jet OLEDB:Registry Path=;Jet OLEDB:Database Locking Mode=1;Data Source=""D:\aspnet\data\data.mdb"";Mode=Share Deny None;Jet OLEDB:Engine Type=5;Provider=""Microsoft.Jet.OLEDB.4.0"";Jet OLEDB:System database=;Jet OLEDB:SFP=False;persist security info=False;Extended Properties=;Jet OLEDB:Compact Without Replica Repair=False;Jet OLEDB:Encrypt Database=False;Jet OLEDB:Create System Database=False;Jet OLEDB:Don't Copy Locale on Compact=False;User ID=Admin;Jet OLEDB:Global Bulk Transactions=1";
//
// cmdgetall
//
this.cmdgetall.CommandText = "SELECT * FROM wenzhang";
this.cmdgetall.Connection = this.oleDbConnection1;
//
// cmdgetbyid
//
this.cmdgetbyid.CommandText = "SELECT title, writer FROM wenzhang WHERE (id = @ id)";
this.cmdgetbyid.Connection = this.oleDbConnection1;
//
// comupdate
//
this.comupdate.CommandText = "UPDATE wenzhang SET title = @ title, wrter = @ writer WHERE (id = @ id)";
this.comupdate.Connection = this.oleDbConnection1;
this.ddlid.SelectedIndexChanged += new System.EventHandler(this.ddlid_SelectedIndexChanged);
this.btnsave.Click += new System.EventHandler(this.btnsave_Click);
this.Load += new System.EventHandler(this.Page_Load); }
#endregion
}
}错误如下:“/aspnet”应用程序中的服务器错误。
--------------------------------------------------------------------------------此 OleDbParameterCollection 中未包含带有 ParameterName“@id”的 OleDbParameter。
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 异常详细信息: System.IndexOutOfRangeException: 此 OleDbParameterCollection 中未包含带有 ParameterName“@id”的 OleDbParameter。源错误:
行 52: {
行 53: string id=ddlid.SelectedItem.Text;
行 54: this.cmdgetbyid.Parameters["@id"].Value=id;
行 55: this.oleDbConnection1.Open();
行 56: System.Data.OleDb.OleDbDataReader dr;
源文件: d:\aspnet\webform2.aspx.cs 行: 54 堆栈跟踪:
[IndexOutOfRangeException: 此 OleDbParameterCollection 中未包含带有 ParameterName“@id”的 OleDbParameter。]
System.Data.OleDb.OleDbParameterCollection.RangeCheck(String parameterName) +48
System.Data.OleDb.OleDbParameterCollection.get_Item(String parameterName) +10
aspnet.WebForm2.ddlid_SelectedIndexChanged(Object sender, EventArgs e) in d:\aspnet\webform2.aspx.cs:54
System.Web.UI.WebControls.ListControl.OnSelectedIndexChanged(EventArgs e) +108
System.Web.UI.WebControls.DropDownList.System.Web.UI.IPostBackDataHandler.RaisePostDataChangedEvent() +26
System.Web.UI.Page.RaiseChangedEvents() +115
System.Web.UI.Page.ProcessRequestMain() +1099
--------------------------------------------------------------------------------
版本信息: Microsoft .NET Framework 版本:1.1.4322.2032; ASP.NET 版本:1.1.4322.2032 ·只要一选择列表框中的项或者点按钮提交保存,就会出现上面的错误,
我的wenzhang 表里的id字段是自动编号的整型的主键,会不会是这个用冲突呢?还有 总是说 某某附近的 "@"有错误,无法分析查询和UPDATE文本云云,我的cmdgetbyid 的commandtext属性是:
SELECT title, writer FROM wenzhang WHERE (id = @ id)
cmdupdate 的 commandtext属性是:
UPDATE wenzhang SET title = @ title, wrter = @ writer WHERE (id = @ id)是不是这样句有问题啊?查询生成器的确定按钮就报以上错误呢?
请大家帮帮我,我搞了24个小时以上了,这个问题依然么有解决,好郁闷啊,
我第一次装VS.net 就喜欢上她了,我想把ASP.NET学好,我好孤独,没人教也没人交流,
教教我这个新手吧
cmdgetbyid.Parameters["@id"].Value=id;其他各属性类似.
this.cmdgetbyid.Parameters["@id"].Value=id;
加了这句总提示
找不到类型或命名空间名称“OleDbType”,(是否缺少using指令或程序集引用)
--------------------------------------------------------------------------------OleDbParameterCollection 仅接受非空的 OleDbParameter 类型对象,不接受 String 对象。
是不是我的id字段是自动编号有关呢?
cmdgetbyid.Parameters["@id"].Value=id;这个 oledb 要引用 using System.Data.OleDb;命名空间
cmdgetbyid.Parameters.Add("@id",OleDbType.Char,10);
cmdgetbyid.Parameters["@id"].Value=id;oledb 要引用 using System.Data.OleDb;命名空间
我直接写在.cs文件开头里试一试
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 异常详细信息: System.Data.OleDb.OleDbException: 语法错误 (操作符丢失) 在查询表达式 '(id = @ id)' 中。源错误:
行 57: this.oleDbConnection1.Open();
行 58: System.Data.OleDb.OleDbDataReader dr;
行 59: dr=this.cmdgetbyid.ExecuteReader(CommandBehavior.SingleRow);
行 60: if (dr.Read())
行 61: {
源文件: d:\aspnet\webform2.aspx.cs 行: 59
我的两个command控件的情况是:cmdgetbyid 的commandtext属性是:
SELECT title, writer FROM wenzhang WHERE (id = @ id)
cmdupdate 的 commandtext属性是:
UPDATE wenzhang SET title = @ title, wrter = @ writer WHERE (id = @ id)好象是有错误是不是这个sql语句不能这样写?还是我之前要声明"@id"等这样的变量?
cmdgetbyid.Parameters.Add("@id",OleDbType.Char,10); 这一句不就行了吗?
还改SQL语句吗?
你这样试试:
cmdgetbyid.Parameters.Add(New OleDbParameter("@id",OleDbType.Integer));
cmdgetbyid.Parameters["@id"].Value=id;//确保这个id是int型的.如果是textbox里取出来的,先把它转换为int.
{
int id=ddlid.SelectedItem.Text;//无法转换string为integer
cmdgetbyid.Parameters.Add("@id",OleDbType.Integer,10);
this.cmdgetbyid.Parameters["@id"].Value=id;
this.oleDbConnection1.Open();
System.Data.OleDb.OleDbDataReader dr;
dr=this.cmdgetbyid.ExecuteReader(CommandBehavior.SingleRow);
if (dr.Read())
{
txttitle.Text=(string)dr["title"];
txtwriter.Text=(string)dr["writer"];
}
dr.Close();
this.oleDbConnection1.Close();
} private void btnsave_Click(object sender, System.EventArgs e)
{
ing id=ddlid.SelectedItem.Text;//无法转换string为integer
this.comupdate.Parameters["@id"].Value=id;
this.comupdate.Parameters["@title"].Value=txttitle.Text;
this.comupdate.Parameters["@writer"].Value=txtwriter.Text;
this.oleDbConnection1.Open();
this.comupdate.ExecuteNonQuery();
this.oleDbConnection1.Close();
}我不知道怎么把 ddlid.SelectedItem.Text 转成Integer
哎 没有办法,才入门一星期水平低,语法都不熟
http://free.ys168.com/?nada
这个是我的网络硬盘地址,可以下载,在ASP NET 目录里
有空帮我看看吧,谢谢啊
int id=int.Parse(ddlid.SelectedItem.Text);
或
int id=Convert.ToInt32(ddlid.SelectedItem.Text);
--------------------------------------------------------------------------------语法错误 (操作符丢失) 在查询表达式 '(id = @ id)' 中。
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 异常详细信息: System.Data.OleDb.OleDbException: 语法错误 (操作符丢失) 在查询表达式 '(id = @ id)' 中。源错误:
行 57: this.oleDbConnection1.Open();
行 58: System.Data.OleDb.OleDbDataReader dr;
行 59: dr=this.cmdgetbyid.ExecuteReader(CommandBehavior.SingleRow);
行 60: if (dr.Read())
行 61: {
看来下拉列表的项目数据类型搞好了没什么问题了,对应id字段也是int类型的了
还是这两个command对象的commandtext属性有问题cmdgetbyid 的commandtext属性是:
SELECT title, writer FROM wenzhang WHERE (id = @ id)
cmdupdate 的 commandtext属性是:
UPDATE wenzhang SET title = @ title, wrter = @ writer WHERE (id = @ id)这可能是最后的错误了,真是麻烦你了555
你需要在开始添加命名空间 using System.Data.OleDb;
private void ddlid_SelectedIndexChanged(object sender, System.EventArgs e)
{
int id=int.Parse(ddlid.SelectedItem.Text);
cmdgetbyid.Parameters.Add(new OleDbParameter("@id",OleDbType.Integer));
cmdgetbyid.Parameters["@id"].Value=id;
oleDbConnection1.Open();
OleDbDataReader dr;
dr=cmdgetbyid.ExecuteReader(CommandBehavior.SingleRow);
if (dr.Read())
{
txttitle.Text=(string)dr["title"].ToString();
txtwriter.Text=(string)dr["writer"].ToString();
}
dr.Close();
oleDbConnection1.Close();
} private void btnsave_Click(object sender, System.EventArgs e)
{
int id = int.Parse(ddlid.SelectedItem.Text);
comupdate.Parameters.Add(new OleDbParameter("@id",OleDbType.Integer));
comupdate.Parameters.Add(new OleDbParameter("@title",OleDbType.Char));
comupdate.Parameters.Add(new OleDbParameter("@write",OleDbType.Char));
comupdate.Parameters["@id"].Value = id;
comupdate.Parameters["@title"].Value = txttitle.Text;
comupdate.Parameters["@writer"].Value = txtwriter.Text;
oleDbConnection1.Open();
comupdate.ExecuteNonQuery();
oleDbConnection1.Close();
}那两个commandtext好像没什么问题.不过你是用数据库控件直接放在页面上的,我一般不这么写,所以感觉很混乱.
有什么问题可以qq 19908050
注意:
ID是关键字,应该用[]括起来
还是这样?
UPDATE wenzhang SET title = @ title, wrter = @ writer WHERE (id = [@id])
或者是这样?
UPDATE wenzhang SET title = @ title, wrter = @ writer WHERE (id = @[id])啊,我好郁闷。。