关于数据库连接问题

cato00o 2010-08-19 11:16:22
c#项目 做了个sql数据库连接类,
内容如下
public static class DBHelper
{

private static SqlConnection connection;
public static SqlConnection Connection
{
get
{
string connectionString = "server=192.168.0.81\\sqlexpress;database=company;uid=sa;pwd=sa;";
if (connection == null)
{
connection = new SqlConnection(connectionString);
connection.Open();
}
else if (connection.State == System.Data.ConnectionState.Closed)
{
connection.Open();
}
else if (connection.State == System.Data.ConnectionState.Broken)
{
connection.Close();
connection.Open();
}
return connection;
}
}


public static int ExecuteCommand(string safeSql)
{
SqlCommand cmd = new SqlCommand(safeSql, Connection);
int result = cmd.ExecuteNonQuery();
return result;
}
}
这里面的数据库连接地址是写死的,我现在想在前台窗体中输入数据库地址、登录名、密码这三项,点击按钮后改写连接字符串,或者在调用数据库类是连接字符串内容改成窗口输入的内容,请问该如何实现啊?
...全文
148 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
huwen7565833 2010-08-27
  • 打赏
  • 举报
回复
string server = "";
string database = "";
string uid = "";
string pwd = "";
string connectionString = string.Format("server={0};database={1};uid={2}a;pwd=3;", server,database,uid,pwd);

UP
  • 打赏
  • 举报
回复


  • 打赏
  • 举报
回复
至于说参数化,这类问题我就不回复了。
  • 打赏
  • 举报
回复
绝对不能依赖
private static SqlConnection connection;
这种东西。一位内SqlConnection人家是基于连接池的,所以每次调用Connection属性时都必须new 一个 SqlConnection 对象实例出来,才能用到连接池的好处。相反地,静态共享SqlConnection功能,在多用户使用时就会让你的程序频繁垮掉,而且根本用不到连接池,是画蛇添足的。
sxiaohui8709253 2010-08-19
  • 打赏
  • 举报
回复
把数据库链接字符串 拆分成参数 存到一个地方 然后再静态构造函数里头读过来
  • 打赏
  • 举报
回复
我的这个绝对好用,做出来的对话框你只要输入登录名如sa,和密码,其他的都是选择题,不用你填,阿哈哈。绝对通俗易懂啊,楼主给分吧 哈哈哈
  • 打赏
  • 举报
回复
上代码
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using Microsoft.Data.ConnectionUI;
using System.Xml;
namespace DSZQ
{
public partial class DataConn : Form
{
public DataConn()
{
InitializeComponent();
//filepath = Environment.CurrentDirectory;
filepath =Application.StartupPath;
filepath += "//App.config";
}
string filepath;
string connstr;
/// <summary>
///
/// </summary>
/// <param name="key"></param>
/// <param name="strValue"></param>
public void Modify(string key, string strValue) //两个参数:要修改的键值 和 要修改的新值;
{
string flagstr = strValue;
if (strValue == string.Empty)
{
MessageBox.Show("连接串不能为空!");
return;
}
//string XPath = "/configuration/userInfo/add[@key='?']";
try
{
string XPath = "/configuration/appSettings/add[@key='?']";
XmlDocument domWebConfig = new XmlDocument();

//domWebConfig.Load((HttpContext.Current.Server.MapPath("web.config")));
domWebConfig.Load(filepath);
XmlNode addKey = domWebConfig.SelectSingleNode((XPath.Replace("?", key)));

if (addKey == null)
{
//Response.Write("<script>alert (\"没有找到<add key='" + key + "' value=.../>的配置节\")</script>");
MessageBox.Show("没有找到<add key='" + key + "'>的配置节");
return;
}
addKey.Attributes["value"].InnerText = strValue;
domWebConfig.Save(filepath);
MessageBox.Show("数据库连接配置成功","信息提示");
txtConnectionString.Text = connstr;
txtConnectionString.Enabled = false;
}
catch
{
// MessageBox.Show("在"+Environment.CurrentDirectory + "目录下找不到web.config配置文件","信息提示");
txtConnectionString.Enabled = true;
txtConnectionString.Clear();
txtConnectionString.ForeColor = Color.Red;
txtConnectionString.Text ="在" + Application.StartupPath + "目录下找不到App.config配置文件";
return;
}

}

private void buttonConn_Click(object sender, EventArgs e)
{
DataConnectionDialog dialog = new DataConnectionDialog();
//添加数据源列表,可以向窗口中添加自己程序所需要的数据源类型
dialog.DataSources.Add(DataSource.SqlDataSource);
dialog.DataSources.Add(DataSource.OdbcDataSource);

dialog.SelectedDataSource = DataSource.SqlDataSource;
dialog.SelectedDataProvider = DataProvider.SqlDataProvider;


//只能够通过DataConnectionDialog类的静态方法Show出对话框
//不同使用dialog.Show()或dialog.ShowDialog()来呈现对话框
if (DataConnectionDialog.Show(dialog, this) == DialogResult.OK)
{
connstr = dialog.ConnectionString;
connstr = "Provider=SQLOLEDB.1;" + connstr;
Modify("ConnStr",connstr);


}
}


}
}
  • 打赏
  • 举报
回复
做个对话框,选择要连接的数据可,然后直接连接数据库就行了,然后把连接窜保存在config文件里,我有写好的代码,我qq358429109,有兴趣就来拿啊
johndii 2010-08-19
  • 打赏
  • 举报
回复
没用过带参数的构造函数么,重载?
还要加些异常处理。
cato00o 2010-08-19
  • 打赏
  • 举报
回复
public static string connectionString = "";
public string MakeConnStr(string strServer, string strUID, string strPwd)
{
return connectionString = "server=" + strServer + ";database=company;uid=" + strUID + ";pwd=" + strPwd;
}
private static SqlConnection connection;
public static SqlConnection Connection
{

get
{
//string connectionString = "server=192.168.0.81\\sqlexpress;database=company;uid=sa;pwd=sa;";
if (connection == null)
{
connection = new SqlConnection(connectionString);
connection.Open();
}
else if (connection.State == System.Data.ConnectionState.Closed)
{
connection.Open();
}
else if (connection.State == System.Data.ConnectionState.Broken)
{
connection.Close();
connection.Open();
}
return connection;
}
}
这样吗?
gxingmin 2010-08-19
  • 打赏
  • 举报
回复
connectionString是静态的,所以赋值一次后,这个变量值一直存在,不影响你的get
cato00o 2010-08-19
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 gxingmin 的回复:]
引用 6 楼 cato00o 的回复:
引用 3 楼 gxingmin 的回复:
DBHelper类加个方法、或加个属性、甚至加个字段也行

把用户输入的数据库地址、登录名和密码作为参数传进去,然后组合成一个链接串,使用的时候用你这个组合后的连接字符串链接数据库

如:
public string MakeConnStr(string strServer, string strUID……
[/Quote]

如果不写在GET{}里面 那我调用dbhelper类中的其他方法时能自动连接数据库吗?
gxingmin 2010-08-19
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 cato00o 的回复:]
引用 3 楼 gxingmin 的回复:
DBHelper类加个方法、或加个属性、甚至加个字段也行

把用户输入的数据库地址、登录名和密码作为参数传进去,然后组合成一个链接串,使用的时候用你这个组合后的连接字符串链接数据库

如:
public string MakeConnStr(string strServer, string strUID, string strPwd)
{
……
[/Quote]

不用在get里调用
你把get里的connectionString变量提取到外面来,在类里定义
private static string connectionString;
public static void MakeConnStr(string strServer, string strUID, string strPwd)
{
connectionString = "server=" + strDB + ";database=company;uid=" + strUID + ";pwd=" + strPwd;
}


外面的代码先调用MakeConnStr函数,再访问Connection属性
cato00o 2010-08-19
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 jayinit 的回复:]
存储过程!!吧你用到的数据库地址、登录名、密码都写成参数,然后调用
[/Quote]
我最郁闷的就是存储过程…………
cato00o 2010-08-19
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 gxingmin 的回复:]
DBHelper类加个方法、或加个属性、甚至加个字段也行

把用户输入的数据库地址、登录名和密码作为参数传进去,然后组合成一个链接串,使用的时候用你这个组合后的连接字符串链接数据库

如:
public string MakeConnStr(string strServer, string strUID, string strPwd)
{
return "server=" + s……
[/Quote]

get 里面调用不了那个方法啊!
q107770540 2010-08-19
  • 打赏
  • 举报
回复

string server = "";
string database = "";
string uid = "";
string pwd = "";
string connectionString = string.Format("server={0};database={1};uid={2}a;pwd=3;", server,database,uid,pwd);
gxingmin 2010-08-19
  • 打赏
  • 举报
回复
DBHelper类加个方法、或加个属性、甚至加个字段也行

把用户输入的数据库地址、登录名和密码作为参数传进去,然后组合成一个链接串,使用的时候用你这个组合后的连接字符串链接数据库

如:
public string MakeConnStr(string strServer, string strUID, string strPwd)
{
return "server=" + strDB + ";database=company;uid=" + strUID + ";pwd=" + strPwd;
}
  • 打赏
  • 举报
回复
存储过程!!吧你用到的数据库地址、登录名、密码都写成参数,然后调用
cwaspnet 2010-08-19
  • 打赏
  • 举报
回复
传参进去呗……
thszhong 2010-08-19
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 sp1234 的回复:]

绝对不能依赖C# code
private static SqlConnection connection;
这种东西。一位内SqlConnection人家是基于连接池的,所以每次调用Connection属性时都必须new 一个 SqlConnection 对象实例出来,才能用到连接池的好处。相反地,静态共享SqlConnection功能,在多用户使用时就会让你的程序频繁垮掉,而且根本用不到连……
[/Quote]

不懂,谁解析一下。
加载更多回复(1)

110,536

社区成员

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

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

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