C#WinForm连接本地或远程Sql数据库,并进行简单操作。

时间:2021-02-09 13:30:25

在学习C#课程时,看到课本有相关内容的介绍。想起如果自己能做一个操作数据库的小软件应该不错。

所需要的知识基础就是sql的一些语句和C#的ADO.NET。

主要就是Connection、Command、DataReader和Dataset,还有就是DataAdapter等封装好的类。

还有就是一些基本控件的用法。如dataGridView,comboBox,button等。

做的过程中,遇到挺多问题de,解决之后能学到很多东西。

1.

    使用ADO.NET访问数据库,首先就是要建立与数据库的连接。在学习的过程中,发现整个小软件要做很多次与数据库的连接和断开。所以这部分是最基础的内容。

    连接数据库,主要是使用SqlConnection类,创建该类的对象,用open()方法即可打开与数据库的连接。在连接中,要注意的就是创建SqlConnection对象时的连接字符。

    更改连接字符,即可连接不同的数据库。在写这个小软件的过程中,将连接字符的赋值和选择封装成一个类,因为要用到很多次。

下面是自己写的连接字符串的类。

namespace WindowsFormsApplication1
{
class connect
{

String dbName; //数据库名称:
String userName;
String password;
int flag;
String sql1;
String sql2;
String sql3;
String serverAddress1;
public string Connect()
{

userName = Form7.userName1; //Form7是登陆界面,从登陆界面获得账号,密码
password = Form7.password1; //
flag = Form7.check; //flag 在这里用于标记用户选的是那种验证登陆方式
serverAddress1 = usersAdd.serverAddress;
dbName = Form7.dbName1;
sql1 = "server=" + serverAddress1 + ";database=" + dbName + ";Uid=" + userName + ";Pwd=" + password + ";"; // SQL账号验证
sql2 = "server=.;database=" + dbName + ";Trusted_Connection=SSPI"; // windows身份验证

if (flag == 0) // 0是 windows身份验证 1是SQL账号验证
{
sql3 = sql2;
}
else
{
sql3 = sql1;
}
return sql3;
}

2.与数据库建立链接之后,就是对数据库的一些操作。主要用SqlCommand类来实现。SqlCommand 和 DatdSet 的使用可以自行百度一下。
3.还有就是使用DataSet。DataSet可以作为非连接的数据缓存,他独立于数据源,将数据库的数据加载到DataSet中,为数据的操作做准备。

4.最后,就是使用DataAdapter,他是数据集DataSet与数据源之间的桥梁。例如,实现查询功能:

                SqlConnection con = new SqlConnection(sql3);                     //sql3是数据库链接字符
SqlDataAdapter sda = new SqlDataAdapter(sql_3, con); //sql_3是查询 限制语句
DataSet ds = new DataSet();
sda.Fill(ds, table_name); //装载
    主体功能的基本的知识就是以上这些。

    自己做了个如下的登陆界面。该界面可以选择连接本地或者远程的数据库,输入对应信息时,就可以连接数据库了,登录界面要注意对用户的输入进行合法性的校验。

   C#WinForm连接本地或远程Sql数据库,并进行简单操作。


    登陆后,主界面如下,有一些基本功能,如查询,修改和删除数据  数据库的备份与分离,附加数据库等。这些功能的实现参考了一下别人的代码。此外还有一些无聊的小工具。


    C#WinForm连接本地或远程Sql数据库,并进行简单操作。


    这部分的内容就学到这里啦,明天开始复习tcp/ip 快考试了。

    如果有人也在学连接数据库的,大家一起交流一下 。

    需要的 联系我微信:hsk710685973jq  (大家一起学习

    下面是我写的登陆界面的代码。可以选择连接本地或远程数据库。欢迎大家交流,教一下我这个菜鸟。

        

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Data.SqlClient; //用于连接sql数据库
using System.Threading;


namespace WindowsFormsApplication1
{
public partial class Form7 : Form
{
public static int check = 0; //标记 用户选了 sql or windows 认证
public static string strCon = "";
public static string userName1 = "";
public static string password1 = "";
public static string dbName1 = "";
public int thread_control = 0; //用于监视文本框线程控制变量


public Form7()
{
InitializeComponent();

}

private void Form7_Load(object sender, EventArgs e)
{
Control.CheckForIllegalCrossThreadCalls = false;
textBox1.Text = "(local)";
Thread th4 = new Thread(textBox1_monitor); //监控ip框的线程
th4.IsBackground = true;
th4.Start();
}


private void button2_Click(object sender, EventArgs t)
{
thread_control = 1;

if (checkBox1.Checked == true) // check 1 是勾选 windows认证的
{
strCon = "server=" + textBox1.Text + ";Initial Catalog =" + comboBox1.Text + ";Integrated Security=SSPI;Connection Timeout = 5;";
}
else if (checkBox2.Checked == true) // 2 s是用密码
{
strCon = "server=" + textBox1.Text + ";Database=" + comboBox1.Text + ";Uid=" + textBox2.Text + ";Pwd=" + textBox3.Text + ";Connection Timeout = 5;";
} //textBox2.Text, textBox3.Text, 分别是用户名 加密码
SqlConnection sqlcon = new SqlConnection(strCon);
try
{
//记录账号密码
userName1 = textBox2.Text;
password1 = textBox3.Text;
dbName1 = comboBox1.Text;
sqlcon.Open();
usersAdd windows7 = new usersAdd(dbName1, textBox1.Text); //这是 下一个窗口
windows7.Show();
this.Hide();
}
catch (Exception e)
{
MessageBox.Show("请输入你要连接的数据库的信息\n " + "计算机说: " + e.Message);
}
sqlcon.Close();
}

private void checkBox1_CheckedChanged(object sender, EventArgs e)
{

if (checkBox1.Checked)
{
checkBox1.Checked = true;
checkBox2.Checked = false;
}
check = 0;
textBox2.Text = textBox3.Text = null;
if (checkBox1.Checked)
{
textBox2.Enabled = textBox3.Enabled = 确定.Enabled = false;
checkBox2.Checked = false;
Thread th = new Thread(Win);
th.IsBackground = true;
th.Start();
}

}

public void Win()
{
string str = "server=" + textBox1.Text + ";database=master;Integrated Security=SSPI;Connection Timeout = 5;";
comboBox1.DataSource = getTable(str);
comboBox1.DisplayMember = "name";
comboBox1.ValueMember = "name";
}
private void checkBox2_CheckedChanged(object sender, EventArgs e)
{
if (checkBox2.Checked)
{
checkBox1.Checked = false;
checkBox2.Checked = true;
}
check = 1;
textBox2.Enabled = textBox3.Enabled = 确定.Enabled = true;
textBox2.Focus();
comboBox1.Text = null;
}

private void button1_Click(object sender, EventArgs e)
{
Thread th1 = new Thread(SQL);
th1.IsBackground = true;
th1.Start();
}

public void SQL()
{

if (check == 1)
{
string str = "server=" + textBox1.Text + ";database=master;Uid=" + textBox2.Text + ";Pwd=" + textBox3.Text + ";Connection Timeout = 3;";
comboBox1.DataSource = getTable(str);
}
else
{
MessageBox.Show("请勾选SQL身份验证选项");
}
comboBox1.DisplayMember = "name";
comboBox1.ValueMember = "name";
}


public DataTable getTable(string str)
{
try
{
SqlConnection sqlcon = new SqlConnection(str);
SqlDataAdapter da = new SqlDataAdapter("select name from sysdatabases ", sqlcon);
DataTable dt = new DataTable("sysdatabases");
da.Fill(dt);
return dt;
}
catch (Exception hsk)
{
MessageBox.Show("您输入的账号密码信息可能有误\n" + "具体错误是:" + hsk.Message);
return null;
}
}

public void textBox1_monitor() //用于限制 ip登陆时 误选 windows认证
{
try
{
while (thread_control != 1)
{
if (textBox1.Text != "(local)" & textBox1.Text != "")
{
checkBox1.Enabled = false;
}
else
{
checkBox1.Enabled = true;
}
}
}
catch
{
}

}

private void Form7_FormClosed(object sender, FormClosedEventArgs e)
{
thread_control = 0; //让监视文本框的线程退出死循环
Application.Exit();
}


private void checkBox2_Click(object sender, EventArgs e)
{
check = 1;
}

private void pictureBox1_Click(object sender, EventArgs e)
{
Form2 window1 = new Form2();
window1.Show();
this.Hide();
}

}
}