ACCESS问题,请大大指教。

paigus 2009-03-23 10:56:21
private void button2_Click_1(object sender, EventArgs e)
{
OleDbConnection coon = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\famliy.mdb;");
coon.Open();
OleDbDataAdapter sda = new OleDbDataAdapter("SELECT sum(famMoney) AS 消费总额 FROM FamilyDB WHERE famName =@1 and exists(select * from FamilyDB where famdate between @2 and @3)", coon);
sda.SelectCommand.Parameters.Add("@1", OleDbType.VarChar, 100).Value = this.text.Trim();
sda.SelectCommand.Parameters.Add("@2", OleDbType.DBDate).Value = dateTimePicker1.Value;
sda.SelectCommand.Parameters.Add("@3", OleDbType.DBDate).Value = dateTimePicker2.Value;
DataSet ds = new DataSet();
sda.Fill(ds);
dataGridView2.DataSource = ds;
dataGridView2.DataSource = ds.Tables[0].DefaultView;
coon.Close();


显示消费总额为空。。。 在ACCESS里面用查询也是空,不知道是ACCESS里面语句和SQL2005有什么区别,请大大指教。
...全文
175 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
vbman2003 2009-03-24
  • 打赏
  • 举报
回复
参数化查询,日期参数无须#
vbman2003 2009-03-24
  • 打赏
  • 举报
回复
access参数化查询有二种方法

一是你把这个查询设计在access的查询对象中,然后程序中用cmd.CommandType = adCmdStoredProc,也就是存储过程的方式去调用

二是直接在程序中写语句,要用PARAMETERS关键字指定参数,具体到你问题就是:

string sql="PARAMETERS @1 text,@2 date,@3 date;";
sql+="SELECT sum(famMoney) AS 消费总额 FROM FamilyDB WHERE famName =@1 and famMoney in(select famMoney from FamilyDB where famdate between @2 and @3)"
注意给参数赋值次序必须顺序
vbman2003 2009-03-23
  • 打赏
  • 举报
回复
那要确认数据库中是那个时间段的数据是不是存在了..
paigus 2009-03-23
  • 打赏
  • 举报
回复
up
paigus 2009-03-23
  • 打赏
  • 举报
回复
也是为空,在ACCESS里面执行
vbman2003 2009-03-23
  • 打赏
  • 举报
回复
sql数据库和access的SQL语句语句有许多不同之处,你先在access中执行一下select famMoney from FamilyDB where famdate between @f2 and @f3,看看有没结果
paigus 2009-03-23
  • 打赏
  • 举报
回复
SELECT sum(famMoney) AS 消费总额 FROM FamilyDB WHERE famName =@1 and exists(select * from FamilyDB where famdate between @2 and @3)


这条语句在SQL2005里面可以执行通过,能查出消费总额。

但是在ACCESS里面却显示为空

估计是这里,但是我是第一次转ACCESS数据库,不太明白怎么搞的。
paigus 2009-03-23
  • 打赏
  • 举报
回复
up
paigus 2009-03-23
  • 打赏
  • 举报
回复
OleDbDataAdapter sda = new OleDbDataAdapter("SELECT sum(famMoney) AS 消费总额 FROM FamilyDB WHERE famName =@f1 and famMoney in(select famMoney from FamilyDB where famdate between @f2 and @f3)", coon);

改成这样了,还是显示消费总额 是空
vbman2003 2009-03-23
  • 打赏
  • 举报
回复
access尝试把exists子句改为in子句...
paigus 2009-03-23
  • 打赏
  • 举报
回复
up
paigus 2009-03-23
  • 打赏
  • 举报
回复
还是不行的。。估计是那条SQL语句有问题。
wuyi8808 2009-03-23
  • 打赏
  • 举报
回复
不知参数名可否以数字开头,至少标识符是不行的。

@1、@2、@3 改成 @f1、@f2、@f3 试试。
paigus 2009-03-23
  • 打赏
  • 举报
回复
up
paigus 2009-03-23
  • 打赏
  • 举报
回复
SELECT sum(famMoney) AS 消费总额 FROM FamilyDB WHERE famName =@1 and exists(select * from FamilyDB where famdate between @2 and @3)


SELECT sum(famMoney) AS 消费总额 FROM FamilyDB WHERE famName =@1 and exists(select * from FamilyDB where famdate between #2009-03-23# and #2009-03-23#)

查询字段必须要加#在ACCESS里面,但是请教用代码该怎么写?
paigus 2009-03-23
  • 打赏
  • 举报
回复
在数据库里面那个时间段是存在的呢

111,126

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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