请教程序中的一个错误!

xiaotu98 2003-07-30 09:13:52
一张表(学号,姓名,数学,语文,英语,总分,平均分)
想通过语句增加一条记录,记录的内容前五项由TEXTBOX输入,总分和平均分由语句修改。运行时遇到如下错误“未将对象引用设置到对象的实例”,请大虾指明谢谢!
以下是程序清单:
private void Button4_Click(object sender, System.EventArgs e)
{
string connstring,commstring;
connstring="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=";
connstring+=Server.MapPath("sjk.mdb");
commstring="insert into cj (学号,姓名,数学,语文,英语) values(";
commstring+="'"+addnum.Text+"',";
commstring+="'"+addname.Text+"',";
commstring+="'"+Convert.ToDouble(addmaths.Text)+"',";
commstring+="'"+Convert.ToDouble(addchinese.Text)+"',";
commstring+="'"+Convert.ToDouble(addenglish.Text)+"')";
OleDbDataAdapter da=new OleDbDataAdapter(commstring,connstring);
DataSet ds=new DataSet();
da.Fill(ds,"cj1");
da.UpdateCommand.CommandText="update cj set 平均分=AVG(数学+语文+英语)";
//提示本句有错,未将对象引用设置到对象的实例
da.Fill(ds,"cj1");
da.SelectCommand.CommandText="select * from cj";
da.Fill(ds,"cj1");
loadtable(ds); //此函数用来显示表
}
...全文
15 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiaotu98 2003-07-31
  • 打赏
  • 举报
回复
按思归修改的程序运行到
commstring = String.Format("insert into cj (学号,姓名,数学,语文,英语,总分,平均分) values('{0}','{1}',{2},{3},{4},{5},{6})",addnum.Text,addname.Text,m,c,e,sum,avg);

OleDbConnection conn = new OleDbConnection(connstring)
OleDbCommand cmd =new OleDbDataAdapter(commstring,conn);
conn.Open();
cmd.ExecuteNonQuery();
就会出错,说是"至少一个参数没被指定",是不是String.Format格式化语句有错?
xiaotu98 2003-07-31
  • 打赏
  • 举报
回复
按楼上所说的
commstring = "insert into cj (学号,姓名,数学,语文,英语,总分,平均分) values(addnum.Text,addname.Text,m,c,n,sum,ave)";
总会出现“至少一个参数没有被指定值”
但如果写成
commstring="insert into cj (学号,姓名,数学,语文,英语,物理,化学,总分,平均分) values(";
commstring+=addnum.Text+","+addname.Text+","+m+","+c+","+n+","+p+","+h+","+sum+","+ave+")";
就可以正常运行。请问这两条语句有什么不同吗?
caoit 2003-07-31
  • 打赏
  • 举报
回复
string commstring = "insert into cj (学号,姓名,数学,语文,英语,总分,平均分) values(addnum.Text,addname.Text,m,c,e,sum,avg)";
happyno7 2003-07-30
  • 打赏
  • 举报
回复
补充:
string connstring,commstring;
double m = Convert.ToDouble(addmaths.Text);
double c = Convert.ToDouble(addchinese.Text);
double e = Convert.ToDouble(addenglish.Text);
double sum = m+c+e;
dobule ave = sum/3;

connstring="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=";
connstring+=Server.MapPath("sjk.mdb");
//the following can susceptible to sql inject attack, use OleDbParameter instead

commstring = String.Format("insert into cj (学号,姓名,数学,语文,英语,总分,平均分) values('{0}','{1}',{2},{3},{4},{5},{6})",addnum.Text,addname.Text,m,c,e,sum,avg);

//add
UpdateString="update cj set 平均分=AVG(数学+语文+英语)";

OleDbConnection conn = new OleDbConnection(connstring)
OleDbCommand cmd =new OleDbDataAdapter(commstring,conn);
conn.Open();
cmd.ExecuteNonQuery();
//add
cmd.CommandText=UpdateString;
cmd.ExecuteNonQuery();

OleDbDataAdapter da=new OleDbDataAdapter("select * from cj", conn);
DataSet ds=new DataSet();
da.Fill(ds,"cj1");
loadtable(ds);
conn.Close();
saucer 2003-07-30
  • 打赏
  • 举报
回复
sorry, it should be


OleDbConnection conn = new OleDbConnection(connstring)
OleDbCommand cmd =new OleDbCommand(commstring,conn);
conn.Open();
cmd.ExecuteNonQuery();

OleDbDataAdapter da=new OleDbDataAdapter("select * from cj", conn);
DataSet ds=new DataSet();
da.Fill(ds,"cj1");
loadtable(ds);
conn.Close();


>>>再问:如果我想一次性把所有的记录的总分和平均分都改了,那不是就要用UPDATE,这样的话又是如何修改呢?

commstring = "update cj set 总分= (数学 + 语文 + 英语),平均分 = (数学 + 语文 + 英语)/3";
cmd =new OleDbCommand(commstring,conn);
conn.Open();
cmd.ExecuteNonQuery();
conn.Close();

xiaotu98 2003-07-30
  • 打赏
  • 举报
回复
再问:如果我想一次性把所有的记录的总分和平均分都改了,那不是就要用UPDATE,这样的话又是如何修改呢?
saucer 2003-07-30
  • 打赏
  • 举报
回复
string connstring,commstring;
double m = Convert.ToDouble(addmaths.Text);
double c = Convert.ToDouble(addchinese.Text);
double e = Convert.ToDouble(addenglish.Text);
double sum = m+c+e;
dobule ave = sum/3;

connstring="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=";
connstring+=Server.MapPath("sjk.mdb");
//the following can susceptible to sql inject attack, use OleDbParameter instead

commstring = String.Format("insert into cj (学号,姓名,数学,语文,英语,总分,平均分) values('{0}','{1}',{2},{3},{4},{5},{6})",addnum.Text,addname.Text,m,c,e,sum,avg);

OleDbConnection conn = new OleDbConnection(connstring)
OleDbCommand cmd =new OleDbDataAdapter(commstring,conn);
conn.Open();
cmd.ExecuteNonQuery();

OleDbDataAdapter da=new OleDbDataAdapter("select * from cj", conn);
DataSet ds=new DataSet();
da.Fill(ds,"cj1");
loadtable(ds);
conn.Close();
panyee 2003-07-30
  • 打赏
  • 举报
回复
da.Fill(ds,"cj1");
改成da.Update();

62,243

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧