一个项目中,有很多窗体都要访问数据库,每个窗体都要分别添加数据适配器,建立数据库连接,生成数据集吗?
如果没有这么麻烦,该怎么做?
如果没有这么麻烦,该怎么做?
解决方案 »
- 着急!!!!FtpWebRequest类 只能在部署机器上传文件嘛?
- gridview 的 SelectedIndexChanged 事件中如何区分按钮
- 急!急!datagrid控件绑定记录最后一条丢失问题
- 金融危机对IT行业带来了哪些影响?IT公司会因此而裁员吗?
- 在线等,急急
- 大哥们帮帮我吧
- 自定义gridview列宽 ?
- 请问怎么保存网站(chs.gotdotnet.com)上的文章(包括相互间的链接)到本地硬盘?
- DataGrid无法获取某行的数据,按照正确的方法做了,但是还是有错。
- 请帮帮忙,在线等
- 从Web.Config中读取数据库连接字符串的问题
- Repeater绑定HashTable的问题
参考:SqlHelper(搜索一下)
你可以改一下。当然最后的一个SetTableName函数没用。那个字符集转换的函数也可以不用,除非你遇到中文显示错误的问题。using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using System.Data.Odbc;/// <summary>
/// 操作数据库的类
/// </summary>
public class DataObject
{
public DataObject()
{
ocmd = new OdbcCommand(null, ocnt);
oda = new OdbcDataAdapter(null, ocnt);
} private OdbcConnection ocnt = new OdbcConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString);
private OdbcCommand ocmd;
private OdbcDataAdapter oda;
private int connections; //连接计数,以支持自动连接 public void Open()
{
if (ocnt.State == ConnectionState.Closed)
{
ocnt.Open();
connections = 1;
}
else
connections++;
} public void Close()
{
if (ocnt.State == ConnectionState.Open)
{
if (connections == 1)
ocnt.Close();
else
connections--;
}
} public int ExecuteCommand(string commandText, string paramNames, params object[] paramValues)
{
SetParams(ocmd, paramNames, paramValues);
return this.ExecuteCommand(commandText);
} public int ExecuteCommand(string commandText)
{
Open();
try
{
ocmd.CommandText = SetTableName(commandText);
return ocmd.ExecuteNonQuery();
}
finally
{
Close();
}
}
public DataTable ExecuteSelect(string spName, string paramNames, string paramDirection, params object[] paramValues)
{
SetSPParams(paramNames, paramValues, paramDirection, spName);
oda.SelectCommand = ocmd;
DataTable dt = new DataTable();
Open();
try
{
oda.Fill(dt);
return dt;
}
//catch
//{
// return dt;
//}
finally
{
Close();
}
} public DataTable ExecuteSelect(string selectCommandText, string paramNames, params object[] paramValues)
{
SetParams(oda.SelectCommand, paramNames, paramValues);
return this.ExecuteSelect(selectCommandText);
} public DataTable ExecuteSelect(string selectCommandText)
{
Open();
DataTable dt = new DataTable();
try
{
oda.SelectCommand.CommandText = SetTableName(selectCommandText);
oda.Fill(dt);
return dt;
}
//catch
//{
// return dt;
//}
finally
{
Close();
}
}
public IDataReader ExecuteReader(string selectCommandText, string paramNames, params object[] paramValues)
{
SetParams(ocmd, paramNames, paramValues);
return this.ExecuteReader(selectCommandText);
} public IDataReader ExecuteReader(string selectCommandText)
{
if (ocnt.State == ConnectionState.Closed)
ocnt.Open();
try
{
ocmd.CommandText = SetTableName(selectCommandText);
return ocmd.ExecuteReader(CommandBehavior.CloseConnection);
}
catch
{
Close();
throw;
}
} public object ExecuteScalar(string commandText, string paramNames, params object[] paramValues)
{
SetParams(ocmd, paramNames, paramValues);
return this.ExecuteScalar(commandText);
} public object ExecuteScalar(string commandText)
{
Open();
try
{
ocmd.CommandText = SetTableName(commandText);
return ocmd.ExecuteScalar();
}
finally
{
Close();
}
} public int ExecuteSP(string spName, string paramNames, string paramDirection, params object[] paramValues)
{
SetSPParams(paramNames, paramValues, paramDirection, spName); Open();
try
{
ocmd.ExecuteNonQuery();
return (int)ocmd.Parameters["returnval"].Value;
}
finally
{
Close();
} } public IDataReader ExecuteReader(string spName, string paramNames, string paramDirection, params object[] paramValues)
{
SetSPParams(paramNames, paramValues, paramDirection, spName);
if (ocnt.State == ConnectionState.Closed)
ocnt.Open();
try
{
return ocmd.ExecuteReader(CommandBehavior.CloseConnection);
}
catch
{
Close();
throw;
}
} private void SetParams(OdbcCommand ocmd, string paramNames, params object[] paramValues)
{
ocmd.Parameters.Clear();
string[] names = paramNames.Split(',');
OdbcParameter op;
object obj;
for (int i = 0; i < names.Length; i++)
{
obj = paramValues[i];
if (obj.GetType() == System.Type.GetType("System.String"))
{
op = ocmd.Parameters.Add(names[i], OdbcType.Binary);
op.Value = TranslateChineseStr(obj.ToString());
}
else
ocmd.Parameters.AddWithValue(names[i], obj);
}
} private byte[] TranslateChineseStr(string str)
{
//由于编码原因,要将中文字符串重新编码,936为中文代码页
System.Text.Encoding encoding = System.Text.Encoding.GetEncoding(936);
return encoding.GetBytes(str);
}
private void SetSPParams(string paramNames, object[] paramValues, string paramDirection, string spName)
{ System.Text.StringBuilder sb = new System.Text.StringBuilder("{?=CALL " + spName + "( ");
if (paramNames != null)
{
SetParams(ocmd, paramNames, paramValues);
string[] dirs = paramDirection.Split(',');
for (int i = 0; i < dirs.Length; i++)
{
switch (dirs[i])
{
case "O":
ocmd.Parameters[i].Direction = ParameterDirection.Output;
break;
case "IO":
ocmd.Parameters[i].Direction = ParameterDirection.InputOutput;
break;
default:
ocmd.Parameters[i].Direction = ParameterDirection.Input;
break;
}
}
for (int i = 0; i < paramValues.Length; i++)
sb.Append("?,");
}
OdbcParameter op = new OdbcParameter("returnval", OdbcType.Int);
ocmd.Parameters.Insert(0, op);
ocmd.Parameters["returnval"].Direction = ParameterDirection.ReturnValue;
ocmd.CommandType = CommandType.StoredProcedure; ocmd.CommandText = sb.ToString(0, sb.Length - 1) + ")}";
} private string SetTableName(string cmd)
{
int areaID = UserManager.GetLoginAreaID();
if (areaID != 0)
{
string[] areaName = { "CZ", "WJ", "JT", "LY" };
return System.Text.RegularExpressions.Regex.Replace(cmd, @"(VNET|VNET_USER|VNET_IF)\b",
"$1_" + areaName[areaID - 1]);
}
else
return System.Text.RegularExpressions.Regex.Replace(cmd, @"(VNET|VNET_USER)\b",
"$1_ALL");
}}