C#的数据库问题???
用C#写一个类模块,在里面实现对数据库的操作,包括添加\删除\修改数据.还包括,返回多少条记录和记录集.我没做过C#,请大家给点建议吧! 问题点数:88、回复次数:8Top
1 楼saucer(思归)回复于 2003-12-02 08:30:32 得分 1
if you are using SQL Server, look into Microsoft Data Access Application Block
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnbda/html/daab-rm.asp
Top
2 楼snof(雪狼)回复于 2003-12-02 08:41:53 得分 5
首先取得数据,放到DataGrid里
System.Data.SqlClient.SqlConnection conn = new System.Data.SqlClient.SqlConnection("server=localhost;database=northWind;uid=sa;password=110");
conn.Open();
System.Data.SqlClient.SqlDataAdapter da = new System.Data.SqlClient.SqlDataAdapter("select * from student",conn);
dt = new System.Data.DataSet();
da.Fill(dt,"student");
记录总数:
dt.tables[0].rows.count;
然后绑定数据集和DataGrid
DataGrid.SetDataBinding(dt,"student");
如果需要,可以绑定TextBox来作录入,而用DataGrid显示
this.textBox16.DataBindings.Add("Text",dt,"student.stuno");
然后进行数据的操作如:
增加:
this.BindingContext[dt,"student"].AddNew();
删除:
this.BindingContext[dt,"student"].RemoveAt(this.BindingContext[dt,"student"].Position);
最后把结果写回数据库:
// sqlInsertCommand1
//
this.sqlInsertCommand1.CommandText = "INSERT INTO student(stuno, name) VALUES (@stuno, @name)";
this.sqlInsertCommand1.Connection = this.conn;
this.sqlInsertCommand1.Parameters.Add(new System.Data.SqlClient.SqlParameter("@stuno", System.Data.SqlDbType.VarChar, 4, "stuno"));
this.sqlInsertCommand1.Parameters.Add(new System.Data.SqlClient.SqlParameter("@name", System.Data.SqlDbType.VarChar, 50, "name"));
//
// sqlUpdateCommand1
//
this.sqlUpdateCommand1.CommandText = "UPDATE student SET stuno = @stuno, name = @name WHERE (stuno = @Original_stuno)";
this.sqlUpdateCommand1.Connection = this.conn;
this.sqlUpdateCommand1.Parameters.Add(new System.Data.SqlClient.SqlParameter("@stuno", System.Data.SqlDbType.VarChar, 4, "stuno"));
this.sqlUpdateCommand1.Parameters.Add(new System.Data.SqlClient.SqlParameter("@name", System.Data.SqlDbType.VarChar, 50, "name"));
this.sqlUpdateCommand1.Parameters.Add(new System.Data.SqlClient.SqlParameter("@Original_stuno", System.Data.SqlDbType.VarChar, 4, System.Data.ParameterDirection.Input, false, ((System.Byte)(0)), ((System.Byte)(0)), "stuno", System.Data.DataRowVersion.Original, null));
// sqlDeleteCommand1
//
this.sqlDeleteCommand1.CommandText = "DELETE FROM student WHERE (stuno = @Original_stuno)";
this.sqlDeleteCommand1.Connection = this.conn;
this.sqlDeleteCommand1.Parameters.Add(new System.Data.SqlClient.SqlParameter("@Original_stuno", System.Data.SqlDbType.VarChar, 4, System.Data.ParameterDirection.Input, false, ((System.Byte)(0)), ((System.Byte)(0)), "stuno", System.Data.DataRowVersion.Original, null));
this.sqlDa.DeleteCommand = this.sqlDeleteCommand1;
this.sqlDa.InsertCommand = this.sqlInsertCommand1;
this.sqlDa.UpdateCommand = this.sqlUpdateCommand1;
try
{
sqlDa.Update(dt.GetChanges,"student");
return true;
}
catch(System.Data.SqlClient.SqlException ex)
{
return false;
}
finally
{
conn.Close();
}
//-------------------------------------------
//批量增加10条记录,然后一次写回到数据库
//-------------------------------------
conn = new System.Data.SqlClient.SqlConnection("server=localhost;database=hos;uid=sa;pwd=");
conn.Open();
da = new System.Data.SqlClient.SqlDataAdapter("select * from test",conn);
dt1 = new System.Data.DataSet();
da.Fill(dt1,"test");
DataRow myRow;
for(int i=0;i<10;i++)
{
myRow = dt1.Tables[0].NewRow();
// Then add the new row to the collection.
myRow["ID"] = i.ToString();
dt1.Tables[0].Rows.Add(myRow);
}
System.Data.SqlClient.SqlDataAdapter daa = new System.Data.SqlClient.SqlDataAdapter("Select ID From test", conn);
System.Data.SqlClient.SqlCommandBuilder MyCB = new System.Data.SqlClient.SqlCommandBuilder(daa);
daa.MissingSchemaAction = MissingSchemaAction.AddWithKey;
daa.Update(dt1, "test");Top
3 楼eyestrong(有时爱情图有虚名)回复于 2003-12-02 08:48:39 得分 1
您使用的是VS.net么?
在VS.net中有许多这方面的例子。可以先安装quickstart并对其进行参考。
安装目录:
[VS.net的安装目录]\SDK\v1.1\starthere.htm
安装完成后,在ie的地址栏中输入:http://localhost/quickstart/howto/
便可进入quickstart.
数据和 ADO.NET一项下有许多基本数据库操作的例子。
Top
4 楼jacksonjian(不说)回复于 2003-12-02 08:58:41 得分 0
我用的是类。C#中的类。Top
5 楼Wuzhou98(还在学习...)回复于 2003-12-02 09:00:27 得分 1
markTop
6 楼jacksonjian(不说)回复于 2003-12-02 09:05:44 得分 0
我是想把它们编到一个类中,当使用类的时候在外部修改就可以了。也就是说这个类适合一切的数据的操作。Top
7 楼realMAX(♂ 困惑的浪漫 ♀)回复于 2003-12-02 09:28:46 得分 1
upTop
8 楼NicholasZhr(只在乎一时的灵感)回复于 2003-12-02 09:52:17 得分 79
楼主请看
看看下面的代码可以吗!?你需要的功能全部在里面了。
************************************************************************
using System;
using System.Data;
using System.Data.OleDb;
namespace pdvi
{
public class Pdvi
{
OleDbConnection OleDbConn = new OleDbConnection();
OleDbDataAdapter OleDbAdap = new OleDbDataAdapter();
string connstr = null;
string connuid = null;
string connpwd = null;
bool Statu = false; //数据源状态标志默认是关闭
/// <summary>
/// 默认构造函数
/// </summary>
public Pdvi() //构造函数
{
}
/// <summary>
/// 重载构造函数
/// </summary>
/// <param name="ConnStr">连接字符串</param>
public Pdvi(string ConnStr)
{
initialize(ConnStr); //调用初始化私有方法
}
/// <summary>
/// 初始化私有方法
/// </summary>
/// <param name="ConnStr">连接字符串</param>
private void initialize(string ConnStr) //初始化私有方法
{
OpenConnString(ConnStr); //调用数据访问方法
}
/// <summary>
/// 私有方法连接数据源
/// </summary>
/// <param name="ConnStr">连接字符串</param>
private void OpenConnString(string ConnStr) //调用方法打开数据源
{
try
{
this.OleDbConn.ConnectionString = ConnStr.ToString();
this.OleDbConn.Open();
}
catch(Exception e)
{
throw e;
}
finally
{
if (this.OleDbConn.State == System.Data.ConnectionState.Open)
{
this.Statu = true; //数据源被打开标志
}
else
{
this.Statu = false;
}
}
}
/// <summary>
/// 公共方法连接数据源
/// </summary>
public void OpenConnString() //调用方法打开数据源
{
try
{
this.OleDbConn.ConnectionString = this.connstr.ToString();
this.OleDbConn.Open();
}
catch(Exception e)
{
throw e;
}
finally
{
if (this.OleDbConn.State == System.Data.ConnectionState.Open)
{
this.Statu = true; //数据源被打开标志
}
else
{
this.Statu = false;
}
}
}
/// <summary>
/// 设置连接字符串
/// </summary>
/// <param name="connstr">连接字符串</param>
public void SetConnStr(string connstr) //设置连接数据源的字符串
{
this.connstr = connstr;
}
/// <summary>
/// 设置连接用户名
/// </summary>
/// <param name="connuid">连接用户名</param>
public void SetConnUid(string connuid) //设置连接数据源的用户名
{
this.connuid = connuid;
}
/// <summary>
/// 设置连接密码
/// </summary>
/// <param name="connpwd">连接密码</param>
public void SetConnPwd(string connpwd) //设置连接数据源的通行码
{
this.connpwd = connpwd;
}
/// <summary>
/// 获得连接字符串
/// </summary>
/// <returns>返回连接字符串</returns>
public string GetConnStr() //获取连接数据源的字符串
{
return this.connstr;
}
/// <summary>
/// 获得连接用户名
/// </summary>
/// <returns>返回用户名字符串</returns>
public string GetConnUid() //获取连接数据源的用户名
{
return this.connuid;
}
/// <summary>
/// 获得连接密码
/// </summary>
/// <returns>返回密码字符串</returns>
public string GetConnPwd() //获取连接数据源的通行证
{
return this.connpwd;
}
/// <summary>
/// 执行DataReader命令,返回影响数据表的结果
/// </summary>
/// <param name="sSQL">SQL字符串</param>
/// <returns>返回影响数据表的结果</returns>
public OleDbDataReader GetDataReader(string sSQL)
{
OleDbCommand cmd = new OleDbCommand(sSQL,this.OleDbConn);
try
{
if (this.Statu == true)
{
return cmd.ExecuteReader();
}
else
{
return null;
}
}
catch (Exception e)
{
throw e;
}
finally
{
cmd.Dispose();
this.OleDbConn.Close();
this.OleDbConn.Dispose();
}
}
/// <summary>
/// 执行DataSet方法,返回结果集
/// </summary>
/// <param name="sSQL">SQL字符串</param>
/// <returns>返回影响数据表的结果</returns>
public DataSet GetDataSet(string sSQL)
{
this.OleDbAdap = new OleDbDataAdapter(sSQL,this.OleDbConn);
DataSet Ds = new DataSet();
try
{
if (this.Statu == true)
{
this.OleDbAdap.Fill(Ds);
return Ds;
}
else
{
return null;
}
}
catch (Exception e)
{
throw e;
}
finally
{
this.OleDbConn.Close();
this.OleDbAdap.Dispose();
}
}
}
}Top




