解决方案 »
- 关于Microsoft.Data.ConnectionUI.Dialog里添加DB2的连接
- 用vs2010调试程序生成的.vshost.exe进程终止不了
- 新手求帮助啊,代码真不会写啊,内详
- WPF:当Text太长的时候,有谁能让TreeView的文字显示,能够自动换行?就是希望有TextWrap的效果。
- TcpClient连续发送数据以后报错:通常每个套接字地址(协议/网络地址/端口)只允许使用一次
- 超难问题,翻遍网络了都没找到答案,shtml问题,欢迎大家跟帖探讨
- dateTimePicker绑定dategridview(立即给分)
- 数据库更新后,调用acceptchanges()更新dataset的目的是什么?
- 再线等待,水晶报表多列打印?急!急!急!
- 一个对于Web开发的愚蠢问题,高手不要见笑,望赐教
- LinkBotton传值问题?
- 有关picturebox坐标问题
如果要想达到判断效果的话 就用ds1.Tables[0].Rows.Count 判断
SUM 函数返回数值列的总数,没值就是NULL
这里提示找不到Tables[0]错误
下面是我做的数据库连接类,是不是不太严谨?总提示这里有错误using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;using System.Windows.Forms;using System.Data.OleDb;namespace 长峻油库管理系统
{
public class db_conn
{
public OleDbConnection conn = new OleDbConnection(); //完成数据库连接的构造函数
public db_conn()
{
conn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + Application.StartupPath + "\\yk.mdb";
conn.Open();
}
//数据查询的方法
public System.Data.DataSet getdatafromdb(string str1)
{
DataSet ds = new DataSet();
OleDbDataAdapter dap1 = new OleDbDataAdapter(str1, conn);
try
{
dap1.Fill(ds);
}
catch { }
if (ds.Tables[0].Rows.Count > 0)
return ds;
else
return null;
}
//数据插入、删除、修改操作的方法
public bool updatedatabase(string str1)
{
try
{
OleDbCommand cmd = new OleDbCommand(str1, conn);
cmd.ExecuteNonQuery();
// MessageBox.Show("数据操作成功!","系统提示");
}
catch (Exception e)
{
MessageBox.Show("数据插入错误!" + e.ToString(), "系统提示");
return false;
}
return true;
}
}
}
确实很不严谨首先,使用过的数据连接应该马上释放;其次,对异常的判断也不太严格。我将你的代码改为:
using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Windows.Forms;
using System.Data.OleDb;namespace 长峻油库管理系统
{
public class db_conn
{
public OleDbConnection conn = new OleDbConnection(); //完成数据库连接的构造函数
public db_conn()
{
conn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + Application.StartupPath + "\\yk.mdb";
//不需要conn.Open(),在需要的时候打开,使用完毕后马上关闭,给你注释掉了
//conn.Open();
}
//数据查询的方法
public DataSet getdatafromdb(string str1)
{
DataSet ds = new DataSet();
//使用using子句进行数据访问,以保证数据连接在使用完毕后能彻底关闭
try
{
using (OleDbDataAdapter dap1 = new OleDbDataAdapter(str1, conn))
{
//将数据填充到DataSet中
dap1.Fill(ds, "temptable");
//到这里,数据库会自动关闭
}
if (ds.Tables["temptable"].Rows.Count > 0)
return ds;
else
return null;
}
catch
{
//如果获取数据失败,那么提示错误。这里和finally使用conn.Close(),虽然using能保证释放连接,但加上这个不是什么坏事,防止程序意外终止无法释放连接的情况
conn.Close();
MessageBox.Show("读取数据失败!");
return null;
}
finally
{
conn.Close();
} }
//数据插入、删除、修改操作的方法
public bool updatedatabase(string str1)
{
int i = 0;
try
{
using (OleDbCommand cmd = new OleDbCommand(str1, conn))
{
conn.Open();
i=cmd.ExecuteNonQuery();
// MessageBox.Show("数据操作成功!","系统提示");
}
}
catch (Exception e)
{
MessageBox.Show("数据插入错误!" + e.Message+ "系统提示");
return false;
}
//不建议使用异常来控制返回值的情况,最后还是要判断一下的好。如果没有更新到数据库而程序有没有返回异常就会出错。变量i表示更新语句影响的数据库行数,建议用此方法判断。
if (i > 0)
{
return true;
}
else
{
return false;
}
}
}
}
1,新建winform项目,在空白窗体上拖一个textbox供输入sql检索字符串,一个button来执行检索数据事件,一个DataGridView来显示提取的数据:
form1.cs的button1_Click事件代码: private void button1_Click(object sender, EventArgs e)
{
DataSet ds = new DataSet();
ds = dbconn.getdatafromdb(textBox1.Text);
if (ds != null)
{
dataGridView1.DataSource = ds.Tables[0];
dataGridView1.AutoGenerateColumns = true;
}
else
{
MessageBox.Show("未能取出任何数据,请检查SQL检索语句是否正确?","错误",MessageBoxButtons.OK,MessageBoxIcon.Error);
textBox1.Focus();
}
}
2,右键VS解决方案资源管理器自己的项目,选择“添加-->类”,我输入的类名为“dbconn.cs”,在该类中输入代码(我用我的SQL数据库测试的,改了连接字符串等信息,请注意):using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Data.SqlClient;namespace TreeView
{
class dbconn
{
private static string connstr = "data source=127.1; initial catalog=stlivead;user id=sa;password=sa;"; //数据查询的方法
public static DataSet getdatafromdb(string str1)
{
DataSet ds = new DataSet();
//使用using子句进行数据访问,以保证数据连接在使用完毕后能彻底关闭
try
{
using (SqlConnection conn = new SqlConnection(connstr))
{
using (SqlDataAdapter da = new SqlDataAdapter(str1, conn))
{
//将数据填充到DataSet中
da.Fill(ds, "temptable");
//到这里,数据库会自动关闭
}
}
if (ds.Tables["temptable"].Rows.Count > 0)
return ds;
else
return null;
}
catch
{
//如果获取数据失败,那么提示错误。这里和finally使用conn.Close(),虽然using能保证释放连接,但加上这个不是什么坏事,防止程序意外终止无法释放连接的情况
return null;
}
}
//数据插入、删除、修改操作的方法
public bool updatedatabase(string str1)
{
int i = 0;
try
{
using (SqlConnection conn = new SqlConnection(connstr))
{
using (SqlCommand cmd = new SqlCommand(str1, conn))
{
conn.Open();
i = cmd.ExecuteNonQuery();
// MessageBox.Show("数据操作成功!","系统提示");
}
}
}
catch
{
return false;
}
//不建议使用异常来控制返回值的情况,最后还是要判断一下的好。如果没有更新到数据库而程序有没有返回异常就会出错。变量i表示更新语句影响的数据库行数,建议用此方法判断。
if (i > 0)
{
return true;
}
else
{
return false;
}
}
}
}
但是没解决用sum求和时 假如数据库中不存在这段时间的数据结果集不为空的问题
不太明白你的意思,你是说在某段时间内对应的字段为null值?
就是我的查询语句 是select sum(count) from table where date between date1 and date2
而在我的数据库中没有在 date1 和 date2之间的数据
那么按常理来说 返回的值不应该是null吗?
可我在判断的时候是 这样的
if(ds1==null)
MessageBox.Show("1");
而这个条件语句没有执行 我搞不懂为什么
可以用下面方法:
if (ds.Tables[0].Rows.Count > 0)
return ds;
else
return null
主程序2个TextBox和2个Buttonusing System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Data.SqlClient;
using System.Drawing;
using System.Text;
using System.Windows.Forms;namespace TreeView
{
public partial class getdata : Form
{
public getdata()
{
InitializeComponent();
} DataSet ds = new DataSet();
private void button1_Click(object sender, EventArgs e)
{
dataGridView1.DataSource = null;
ds = dbconn.getdatafromdb(textBox1.Text);
if (ds != null)
{
dataGridView1.DataSource = ds.Tables[0];
dataGridView1.AutoGenerateColumns = true;
}
else
{
MessageBox.Show("未能取出任何数据,请检查SQL检索语句是否正确?", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
textBox1.Focus();
}
} private void button2_Click(object sender, EventArgs e)
{
int isupdteok=0;
isupdteok= dbconn.updatedatabase(textBox2.Text);
if (isupdteok ==0)
{
MessageBox.Show("更新失败!");
}
else
{
MessageBox.Show("更新成功!\n\n此更新影响数据行数为:"+isupdteok.ToString());
button1_Click(sender,e);
}
}
}
}dbconn.cs类using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Data.SqlClient;namespace TreeView
{
class dbconn
{
private static string connstr = "data source=127.1; initial catalog=stlivead;user id=sa;password=sa;"; //数据查询的方法
public static DataSet getdatafromdb(string str1)
{
DataSet ds = new DataSet();
//使用using子句进行数据访问,以保证数据连接在使用完毕后能彻底关闭
try
{
using (SqlConnection conn = new SqlConnection(connstr))
{
using (SqlDataAdapter da = new SqlDataAdapter(str1, conn))
{
//将数据填充到DataSet中
da.Fill(ds, "temptable");
//到这里,数据库会自动关闭
}
}
//改行代码判断ds是否有数据,有返回ds,无返回null
if (ds.Tables["temptable"].Rows.Count > 0)
return ds;
else
return null;
}
catch
{
//如果获取数据失败,那么提示错误。这里和finally使用conn.Close(),虽然using能保证释放连接,但加上这个不是什么坏事,防止程序意外终止无法释放连接的情况
return null;
}
}
//数据插入、删除、修改操作的方法
public static int updatedatabase(string str1)
{
int i = 0;
try
{
using (SqlConnection conn = new SqlConnection(connstr))
{
using (SqlCommand cmd = new SqlCommand(str1, conn))
{
conn.Open();
i = cmd.ExecuteNonQuery();
// MessageBox.Show("数据操作成功!","系统提示");
}
}
return i;
}
catch
{
return i;
}
}
}
}
{
}