关于数据库操作的问题 在C#中需要多次用到数据库的操作语句,包括增、删、改、查等。每次使用的格式都差不多,只是修改一些参数。对于这些雷同的操作,大家是不是写成类或者函数形式呢? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 把所有的sql语句放到DAL数据访问层!!BLL层(业务逻辑层)或UI页面,实例化DAL层的类,通过方法调用!! 写一个辅助类,调用即可.using System;using System.Collections;using System.Collections.Specialized;using System.Data;using System.Data.SqlClient;using System.Configuration;using System.Collections.Generic;namespace StockManageSystemDAL{ /// <summary> /// Copyright (C) 2004-2008 /// 数据访问基础类(基于SQLServer) /// 用户可以修改满足自己项目的需要。 /// </summary> public abstract class DbHelperSQL { //数据库连接字符串(web.config来配置) //<add key="ConnectionString" value="server=127.0.0.1;database=DATABASE;uid=sa;pwd=" /> protected static string connectionString = @"Data Source=PENGXUE20090112\MYSERVER2005;Initial Catalog=StockManageSystem;User id=sa;Password=pengxue"; public DbHelperSQL() { } #region 公用方法 public static int GetMaxID(string FieldName, string TableName) { string strsql = "select max(" + FieldName + ")+1 from " + TableName; object obj = GetSingle(strsql); if (obj == null) { return 1; } else { return int.Parse(obj.ToString()); } } public static bool Exists(string strSql, params SqlParameter[] cmdParms) { object obj = GetSingle(strSql, cmdParms); int cmdresult; if ((Object.Equals(obj, null)) || (Object.Equals(obj, System.DBNull.Value))) { cmdresult = 0; } else { cmdresult = int.Parse(obj.ToString()); } if (cmdresult == 0) { return false; } else { return true; } } #endregion #region 执行简单SQL语句 /// <summary> /// 执行SQL语句,返回影响的记录数 /// </summary> /// <param name="SQLString">SQL语句</param> /// <returns>影响的记录数</returns> public static int ExecuteSql(string SQLString) { using (SqlConnection connection = new SqlConnection(connectionString)) { using (SqlCommand cmd = new SqlCommand(SQLString, connection)) { try { connection.Open(); int rows = cmd.ExecuteNonQuery(); return rows; } catch (System.Data.SqlClient.SqlException E) { connection.Close(); throw new Exception(E.Message); } } } } /// <summary> /// 执行多条SQL语句,实现数据库事务。 /// </summary> /// <param name="SQLStringList">多条SQL语句</param> public static void ExecuteSqlTran(List<string> SQLStringList) { using (SqlConnection conn = new SqlConnection(connectionString)) { conn.Open(); SqlCommand cmd = new SqlCommand(); cmd.Connection = conn; SqlTransaction tx = conn.BeginTransaction(); cmd.Transaction = tx; try { for (int n = 0; n < SQLStringList.Count; n++) { string strsql = SQLStringList[n].ToString(); if (strsql.Trim().Length > 1) { cmd.CommandText = strsql; cmd.ExecuteNonQuery(); } } tx.Commit(); } catch (System.Data.SqlClient.SqlException E) { tx.Rollback(); throw new Exception(E.Message); } } } /// <summary> /// 执行带一个存储过程参数的的SQL语句。 /// </summary> /// <param name="SQLString">SQL语句</param> /// <param name="content">参数内容,比如一个字段是格式复杂的文章,有特殊符号,可以通过这个方式添加</param> /// <returns>影响的记录数</returns> public static int ExecuteSql(string SQLString, string content) { using (SqlConnection connection = new SqlConnection(connectionString)) { SqlCommand cmd = new SqlCommand(SQLString, connection); System.Data.SqlClient.SqlParameter myParameter = new System.Data.SqlClient.SqlParameter("@content", SqlDbType.NText); myParameter.Value = content; cmd.Parameters.Add(myParameter); try { connection.Open(); int rows = cmd.ExecuteNonQuery(); return rows; } catch (System.Data.SqlClient.SqlException E) { throw new Exception(E.Message); } finally { cmd.Dispose(); connection.Close(); } } } /// <summary> /// 向数据库里插入图像格式的字段(和上面情况类似的另一种实例) /// </summary> /// <param name="strSQL">SQL语句</param> /// <param name="fs">图像字节,数据库的字段类型为image的情况</param> /// <returns>影响的记录数</returns> public static int ExecuteSqlInsertImg(string strSQL, byte[] fs) { using (SqlConnection connection = new SqlConnection(connectionString)) { SqlCommand cmd = new SqlCommand(strSQL, connection); System.Data.SqlClient.SqlParameter myParameter = new System.Data.SqlClient.SqlParameter("@fs", SqlDbType.Image); myParameter.Value = fs; cmd.Parameters.Add(myParameter); try { connection.Open(); int rows = cmd.ExecuteNonQuery(); return rows; } catch (System.Data.SqlClient.SqlException E) { throw new Exception(E.Message); } finally { cmd.Dispose(); connection.Close(); } } } /// <summary> /// 用于多表批量数据提交,调用存储过程来实现的数据的插入 /// </summary> /// <param name="dic">参数列表为SqlParameter[]; 存储过程名为 string </param> public static void ExecuteSqlTran(Dictionary<SqlParameter[], string> dic) { using (SqlConnection conn = new SqlConnection(connectionString)) { conn.Open(); using (SqlTransaction trans = conn.BeginTransaction()) { SqlCommand cmd = new SqlCommand(); try { foreach (SqlParameter[] paras in dic.Keys) { string spName = dic[paras].ToString(); PrepareCommand(cmd, conn, trans, spName, paras); cmd.CommandType = CommandType.StoredProcedure; cmd.ExecuteNonQuery(); cmd.Parameters.Clear(); } trans.Commit(); } catch { trans.Rollback(); throw; } } } }......... 1333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333\\=\\zJ vbx 1 自己做个传值的类用List<>封装,用来传参数就很好啊 sqlhelper DBSQLHelper,网上总结很多。楼主看看 你先学着用一下SQLHelper吧。慢慢地再学着自己改成符合自己要求的吧。 2楼的GetSingle好像没有定义呀? SQLHelper是VS2008中的吗?我的VS2005中好像没有? 我这里有最新的访问类你可以来看看看啊,http://www.cnblogs.com/sufei/category/228923.html SQLHelper SqlHelper是一个微软完全开放源码的数据库操作类自己百度一下,很多 SQLHelper与 SqlHelper有什么区别?刚下了一个SqlHelper,感觉很大,似乎用不到这么多? SQLHelper就是一个数据库操作类,一个普通的类并不是vs2008里面的他只是一个类名,你可以取别的名字啊,数据库操作类而已 如果进行基础操作常用的就几个connectionString是存连接字符串增删改用ExecteNonQuery,返回影响条数查用ExecuteDataSet,返回的是dataset别的也都不难,应该有注释,好好看看就可以了 [求助]能获取3.0.5版火狐浏览器输入的网址,但是3.6.12版获取不到网址... 关于DataGridView修改 生成安装项目区分不同的版本 图片的相遇问题的判断? 关于windows media player的请高手指点 如何让C# 控制台程序关闭按钮无效 VB区没人气,net里多数人都出身VB吧,就问个vb通过soap调用webservice怎么能得到记录集 在C#中如何调用WIN32的API函数 有人用过reflector吗? C#将dataset中的表写入数据库问题。求支招 VS2008 加载dll错误 DataGridView排序
BLL层(业务逻辑层)或UI页面,实例化DAL层的类,通过方法调用!!
using System;
using System.Collections;
using System.Collections.Specialized;
using System.Data;
using System.Data.SqlClient;
using System.Configuration;
using System.Collections.Generic;namespace StockManageSystemDAL
{
/// <summary>
/// Copyright (C) 2004-2008
/// 数据访问基础类(基于SQLServer)
/// 用户可以修改满足自己项目的需要。
/// </summary>
public abstract class DbHelperSQL
{
//数据库连接字符串(web.config来配置)
//<add key="ConnectionString" value="server=127.0.0.1;database=DATABASE;uid=sa;pwd=" />
protected static string connectionString = @"Data Source=PENGXUE20090112\MYSERVER2005;Initial Catalog=StockManageSystem;User id=sa;Password=pengxue";
public DbHelperSQL()
{
} #region 公用方法 public static int GetMaxID(string FieldName, string TableName)
{
string strsql = "select max(" + FieldName + ")+1 from " + TableName;
object obj = GetSingle(strsql);
if (obj == null)
{
return 1;
}
else
{
return int.Parse(obj.ToString());
}
}
public static bool Exists(string strSql, params SqlParameter[] cmdParms)
{
object obj = GetSingle(strSql, cmdParms);
int cmdresult;
if ((Object.Equals(obj, null)) || (Object.Equals(obj, System.DBNull.Value)))
{
cmdresult = 0;
}
else
{
cmdresult = int.Parse(obj.ToString());
}
if (cmdresult == 0)
{
return false;
}
else
{
return true;
}
}
#endregion #region 执行简单SQL语句 /// <summary>
/// 执行SQL语句,返回影响的记录数
/// </summary>
/// <param name="SQLString">SQL语句</param>
/// <returns>影响的记录数</returns>
public static int ExecuteSql(string SQLString)
{
using (SqlConnection connection = new SqlConnection(connectionString))
{
using (SqlCommand cmd = new SqlCommand(SQLString, connection))
{
try
{
connection.Open();
int rows = cmd.ExecuteNonQuery();
return rows;
}
catch (System.Data.SqlClient.SqlException E)
{
connection.Close();
throw new Exception(E.Message);
}
}
}
} /// <summary>
/// 执行多条SQL语句,实现数据库事务。
/// </summary>
/// <param name="SQLStringList">多条SQL语句</param>
public static void ExecuteSqlTran(List<string> SQLStringList)
{
using (SqlConnection conn = new SqlConnection(connectionString))
{
conn.Open();
SqlCommand cmd = new SqlCommand();
cmd.Connection = conn;
SqlTransaction tx = conn.BeginTransaction();
cmd.Transaction = tx;
try
{
for (int n = 0; n < SQLStringList.Count; n++)
{
string strsql = SQLStringList[n].ToString();
if (strsql.Trim().Length > 1)
{
cmd.CommandText = strsql;
cmd.ExecuteNonQuery();
}
}
tx.Commit();
}
catch (System.Data.SqlClient.SqlException E)
{
tx.Rollback();
throw new Exception(E.Message);
}
}
}
/// 执行带一个存储过程参数的的SQL语句。
/// </summary>
/// <param name="SQLString">SQL语句</param>
/// <param name="content">参数内容,比如一个字段是格式复杂的文章,有特殊符号,可以通过这个方式添加</param>
/// <returns>影响的记录数</returns>
public static int ExecuteSql(string SQLString, string content)
{
using (SqlConnection connection = new SqlConnection(connectionString))
{
SqlCommand cmd = new SqlCommand(SQLString, connection);
System.Data.SqlClient.SqlParameter myParameter = new System.Data.SqlClient.SqlParameter("@content", SqlDbType.NText);
myParameter.Value = content;
cmd.Parameters.Add(myParameter);
try
{
connection.Open();
int rows = cmd.ExecuteNonQuery();
return rows;
}
catch (System.Data.SqlClient.SqlException E)
{
throw new Exception(E.Message);
}
finally
{
cmd.Dispose();
connection.Close();
}
}
}
/// <summary>
/// 向数据库里插入图像格式的字段(和上面情况类似的另一种实例)
/// </summary>
/// <param name="strSQL">SQL语句</param>
/// <param name="fs">图像字节,数据库的字段类型为image的情况</param>
/// <returns>影响的记录数</returns>
public static int ExecuteSqlInsertImg(string strSQL, byte[] fs)
{
using (SqlConnection connection = new SqlConnection(connectionString))
{
SqlCommand cmd = new SqlCommand(strSQL, connection);
System.Data.SqlClient.SqlParameter myParameter = new System.Data.SqlClient.SqlParameter("@fs", SqlDbType.Image);
myParameter.Value = fs;
cmd.Parameters.Add(myParameter);
try
{
connection.Open();
int rows = cmd.ExecuteNonQuery();
return rows;
}
catch (System.Data.SqlClient.SqlException E)
{
throw new Exception(E.Message);
}
finally
{
cmd.Dispose();
connection.Close();
}
}
} /// <summary>
/// 用于多表批量数据提交,调用存储过程来实现的数据的插入
/// </summary>
/// <param name="dic">参数列表为SqlParameter[]; 存储过程名为 string </param>
public static void ExecuteSqlTran(Dictionary<SqlParameter[], string> dic)
{
using (SqlConnection conn = new SqlConnection(connectionString))
{
conn.Open();
using (SqlTransaction trans = conn.BeginTransaction())
{
SqlCommand cmd = new SqlCommand();
try
{
foreach (SqlParameter[] paras in dic.Keys)
{
string spName = dic[paras].ToString();
PrepareCommand(cmd, conn, trans, spName, paras);
cmd.CommandType = CommandType.StoredProcedure;
cmd.ExecuteNonQuery();
cmd.Parameters.Clear();
}
trans.Commit();
}
catch
{
trans.Rollback();
throw;
}
}
}
}
.........
慢慢地再学着自己改成符合自己要求的吧。
来看看看啊,http://www.cnblogs.com/sufei/category/228923.html
自己百度一下,很多
刚下了一个SqlHelper,感觉很大,似乎用不到这么多?
SQLHelper就是一个数据库操作类,一个普通的类并不是vs2008里面的他只是一个类名,你可以取别的名字啊,数据库操作类而已
connectionString是存连接字符串
增删改用ExecteNonQuery,返回影响条数
查用ExecuteDataSet,返回的是dataset
别的也都不难,应该有注释,好好看看就可以了