C#应用access和sql serve数据库

从一个开源程序,学习access和sql serve在C#中的应用
1. 背景
近来想看看怎么实现数据库的连接,在github上找到一个开源的记账项目,仅供学习使用。

  • 项目使用了一个access数据库,做用户登陆,保存登陆数据
    • .mdb:access数据库文件
  • 登陆成功之后,项目新建了一个sql serve数据库文件, 保存用户数据。
    • .mdf:数据文件
    • .ldf:日志文件

2. 打开数据库文件

  • 打开access数据库文件:

    • 安装access数据库。从微软官网下载office365全家桶,自带access。
    • 双击打开,数据库文件。数据库密码从项目源码中可以得到:string connectstring = "provider=Microsoft.jet.OLEDB.4.0;Data Source=accountsystem.mdb;Jet OleDb:Database Password=lxw618"
    • 登陆后在相应的表中得到了相应的登陆用户和密码。用于后续探索。
  • 打开sql serve数据库文件

    • 安装sql serve数据库,去官网下载,可以选择SSMS安装(带UI),下载后如图:
    • 连接到SQL server服务器(没有远程的情况下,本地电脑本身也可以作为服务器)
      • 本机服务器名称可以为本机名,可以为., 也可以为local,也可以为本机IP

3. sql server如何导入外部.mdf文件

  • 以管理身份运行SSMS,不然没有权限导入,切记
  • 进入并且连接上数据库之后,右键“数据库”,选择“附加”,添加外部mdf文件,ldf文件会一并自动添加到数据库中
  • 导入后的外部数据库

4. 检查配置sql远程权限,远程TCP连接用,本地不用

  • SQL配置管理检查,TCP端口1433
  • 查看sql实例运行状态
  • 防火墙设置


5. 测试sql serve

  • 除了通过SSMS连接,还有一些其他方式,如建立.udl文件

    • 建立一个新建文本文档,把后缀改为.udl;右键打开文件属性,选择连接。测试连接
  • 通过CMD测试连接,如果显示1>则连接成功。用QUIT退出测试

sqlcmd -S <server name> -U <user name> -p <pass word> -d <database name>

6. 通过C#实现数据库的连接

  • access数据库的连接方法
public Boolean GetSqlConnectString()
{
    try
    {
        string connectstring = "provider=Microsoft.jet.OLEDB.4.0;Data Source=accountsystem.mdb;Jet OleDb:Database Password=lxw618";
        string sqlcommand = "select connect from [Set]";
        OleDbConnection aConnection = new OleDbConnection(connectstring);
        aConnection.Open();
        OleDbCommand aCommand = new OleDbCommand(sqlcommand, aConnection);
        OleDbDataReader reader = aCommand.ExecuteReader();
        reader.Read();
        sqlConectstring = reader.GetString(0);               
        reader.Close();
        aConnection.Close();
        return true;
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message, "系统错误");                
        return false;
    }
}
  • sql server数据库连接方法,实际上示例名可以空着
        private void btnSetConnect_Click(object sender, EventArgs e)
        {
            try
            {
                if (this.IsNull() == true)
                {
                    return;
                }                
                string connectstring = "Data Source=" + txtServer.Text + "\\" + txtCase.Text + ";Initial Catalog=" + txtDatabase.Text + ";User ID=" + txtUsername.Text + ";Password=" + txtPassword.Text;
                string sqlcommand = "select username,password from [User]";
                SqlConnection sqlConnection = new SqlConnection(connectstring);
                sqlConnection.Open();
                SqlCommand sqlCommand = new SqlCommand(sqlcommand, sqlConnection);
                SqlDataReader reader = sqlCommand.ExecuteReader();
                MessageBox.Show("连接成功", "恭喜");
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "系统错误");
            }   
        }

7. 登陆测试

  • .表示本地
  • 本地服务器实例名空着,因为不管用cmd还是udl验证都没填写实例名
  • 数据库名,用户名,密码保持一致
  • 实际上的中断用户名和密码是通过在线调试程序打断点的方式得到的。程序里有行比较数据库用户程序名和输入用户程序名的代码段。

8. 附录,早前使用access练习sql指令的命令行

CREATE TABLE 学生(学号 INTEGER Primary Key, 姓名 VARCHAR(4) Not Null, 性别 VARCHAR(1), 出生日期 DATE,家庭住址 VARCHAR(30), 学分 NUMBER);----创建表格

DROP TABLE 学生----删除表格

INSERT INTO 学生 ( 学号, 姓名, 性别, 出生日期, 家庭住址, 学分 )VALUES (1, "张三", "男", #1999/12/9#, "成都市", 98.5);----依据字段插入值

INSERT INTO 学生 VALUES (2, "翠翠", "女", #2000/12/9#, "成都市", 97.5);----依据字段(不标明字段)插入值

INSERT INTO 学生 ( 学号, 姓名, 性别, 家庭住址, 学分 ) VALUES (3, "李四", "男", "成都市", 55.5);----依据字段(带空缺)插入值

UPDATE 学生 SET 学分 = 学分-50 WHERE 姓名="张三";----带条件的更新数据

UPDATE 学生 SET 学分 = 学分-50;----更新所有数据

DELETE * FROM 学生 WHERE 姓名 = "李四";----带条件的删除

DELETE * FROM 学生;----删除

SELECT 姓名, 性别 FROM 学生;----筛选

SELECT 姓名 AS 名字 FROM 学生;----别名

SELECT DISTINCT 性别 FROM 学生;----限制,不重复出现

SELECT 姓名, 性别, 学分 FROM 学生 WHERE 性别 = "男";

SELECT 姓名, 性别, 学分 FROM 学生 WHERE 学分 > 90 OR 学分 < 60;

SELECT 姓名, 性别, 学分 FROM 学生 WHERE 性别 IN ("男");

SELECT 姓名, 性别, 学分 FROM 学生 WHERE 姓名 LIKE "李*";

SELECT 姓名, 性别, 学分 FROM 学生 WHERE 出生日期 Is Null;

SELECT 姓名, 性别, 学分 FROM 学生 WHERE 出生日期 Is Not Null;

SELECT * FROM 学生 ORDER BY 学分 ASC;----正序

SELECT * FROM 学生 ORDER BY 学分 DESC;----反序

SELECT * FROM 学生 WHERE 性别 = "男" ORDER BY 学分 DESC;

SELECT TOP 1 * FROM 学生 WHERE 性别 = "男" ORDER BY 学分 DESC;----取前1名
...
//GROUP BY
//AS
//AVG
//HAVING

posted @ 2024-05-20 13:18  不愿透露姓名的小村村  阅读(6)  评论(0编辑  收藏  举报