利用花生壳实现B电脑连接或程序访问A电脑上的数据库,并将图片音频从B电脑存储至A电脑上的SQL Server数据库并读出

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/vivi_and_qiao/article/details/88352339

想必大家都有这样的疑问,A电脑上安装了SQL Server并创建了数据库,B电脑上也安装有SQL Server,现在需要用B电脑上的SQL Server连接A电脑上SQL Server里的数据库并进行增删改查工作(问题一),将图片音频或其他文件从A电脑存储至B电脑SQLserver数据库(问题二),或者B电脑上的程序需要连接A电脑上SQL Server里的数据库并进行增删改查工作(问题三)。
接下来我们需要一步步的实现:

  1. A电脑上安装SQL server,并创建自己的数据库,具体步骤参考网上步骤
  2. 安装完毕后,在A电脑上单击菜单>>所有应用>>Microsoft SQL Server(具体版本依据实际情况)>>打开SQL Server配置管理器,操作如下图:在这里插入图片描述
  3. 在A电脑上单击菜单>>所有应用>>Microsoft SQL Server(具体版本依据实际情况)>>打开Microsoft SQL Server Management Studio,采用Windows登录,操作如下图:

在这里插入图片描述

4.连接成功后进入如图所示界面:

在这里插入图片描述
5. 右键选择【属性】。左侧选择【安全性】,选中右侧的【SQL Server 和 Windows 身份验证模式】以启用混合登录模式,如果已经是就跳过这步。具体操作如图所示:
在这里插入图片描述
在这里插入图片描述
6. 选择【连接】,勾选【允许远程连接此服务器】,然后点【确定】,如图所示:在这里插入图片描述
7. 展开【安全性】—>【登录名】—>【sa】,右键选择【属性】如图所示:

在这里插入图片描述
8. 左侧选择【常规】,右侧选择【SQL Server 身份验证】,并设置密码,如果已经设置了,跳过这步在这里插入图片描述
9. 右击数据库选择【方面】,如图所示:

在这里插入图片描述

  1. 在右侧的方面下拉框中选择“服务器配置”;将【RemoteAccessEnabled】属性设为“True”,点“确定”,如图所示:在这里插入图片描述
  2. 打开sql server配置管理器:
    在这里插入图片描述 进行相应配置,如图所示:在这里插入图片描述
    12.查找本机IP地址:单击开始菜单>>所有应用>>展开Windows系统>>右键单击命令提示符,以管理员身份运行,在cmd中输入ipconfig,操作如图所示:在这里插入图片描述
    13.在第十步中打开的TCP/IP属性面板中点击IP地址,修改相应参数。
    建议将出现的所有项中:IP地址换为刚查询的本机IP地址,TCP端口更改为1433,TCP动态端口留空,活动和以启用全改为“是”。如图所示:

在这里插入图片描述
14.将"客户端协议"的【TCP/IP】也修改为启用,如图所示:
在这里插入图片描述
15.(相当重要),在第二步中打开的SQL Server配置管理器中,单击SQLServer服务,将右边出现的所有服务右键单击后全部手动关闭,并将启动模式设置为自动,然后再挨个右键单击选择启动(如果没有此步骤,第十二步的所有更改将不会生效)。
16.在设置或控制面板里打开防火墙,选择【高级设置】,如图所示:
在这里插入图片描述
17.【入站规则】当中点击【新建规则】,如图所示:
在这里插入图片描述
我们选择【端口】:
在这里插入图片描述
我们选择规则应用于【TCP】,在【特定本地端口】输入sql server的默认端口号1433,点击下一步
在这里插入图片描述
选择允许连接:
在这里插入图片描述
给该规则任意取一个名字
在这里插入图片描述
再回到16步的第二幅图的配置界面,选择程序,单击“浏览”,选择 “C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\Binn\sqlservr.exe” 可执行文件(具体路径视安装路径而不同),然后单击“确定”按钮。如图所示:
在这里插入图片描述
18.在官网下载花生壳客户端 注册并登录后打开后选择内网穿透,付费成功实现内网穿透后再执行以下步骤,如图所示:
在这里插入图片描述
19.在浏览器打开的页面中进行图示操作:
在这里插入图片描述
20.在新打开的页面中进行如图操作:
在这里插入图片描述
21.在当初页面中点击我的域名,并在右侧找到域名诊断单击,结果如图所示:
在这里插入图片描述
22.现在就可以在B电脑上的SQL Server连接A电脑上SQL Server里的数据库并进行增删改查工作,B电脑上的程序也就可以连接A电脑上SQL Server里的数据库并进行增删改查工作。
首先确保花生壳客户端已经打开并登录成功。
问题一实现连接:在B电脑上打开打开Microsoft SQL Server Management Studio,并按如图所示登录:
在这里插入图片描述
至此链接成功就可以访问A电脑上的数据库了。
问题二:将B电脑上的图片音频或其他类型文件存储至A电脑上的SQL Server数据库:

            SqlConnection conn;
            SqlConnectionStringBuilder scsb = new SqlConnectionStringBuilder();
            scsb.DataSource = @"此处填上图的服务器名称";
            scsb.UserID = @"sa";
            scsb.Password = "此处填设置的密码";
            scsb.InitialCatalog = "此处填要访问的数据库名";
            //创建连接
            conn = new SqlConnection(scsb.ToString());
            ///打开连接
            if (conn.State != ConnectionState.Open)
            {
                conn.Open();
            }
            FileStream fs = new FileStream(@"此处填文件的相对或绝对路径并加上文件名", FileMode.Open);
            BinaryReader br = new BinaryReader(fs);
            Byte[] byData = br.ReadBytes((int)fs.Length);
            fs.Close();
            string str = "insert into  +"此处填要插入记录的数据库名"+ (binfile) values(,@file)";//此处应根据数据库设计合理书写SQL语句
            SqlCommand mycomm = new SqlCommand(str, conn);
            mycomm.Parameters.Add("@file", SqlDbType.Binary, byData.Length);
            mycomm.Parameters["@file"].Value = byData;
            mycomm.ExecuteNonQuery();

问题三:实现B电脑连接A电脑数据库并读取A电脑SQLServer数据库中存储的内容(c#实现):
1.首先进行数据库的连接

public static SqlDataReader connectDataBase(string sqlstr)
        {
             SqlConnection conn;
            SqlConnectionStringBuilder scsb = new SqlConnectionStringBuilder();
            scsb.DataSource = @"此处填上图的服务器名称";
            scsb.UserID = @"sa";
            scsb.Password = "此处填设置的密码";
            scsb.InitialCatalog = "此处填要访问的数据库名";
            //创建连接
            conn = new SqlConnection(scsb.ToString());
            ///打开连接
            if (conn.State != ConnectionState.Open)
            {
                conn.Open();
            }
            SqlCommand comm = new SqlCommand(sqlstr, conn);//参数一是SQL语句,参数二是已经打开了的数据库连接对象
            return comm.ExecuteReader();
        }

2.对字符型,字符串,数字类型数据的读取

     //接下来对方法进行调用
      SqlDataReader databasesdr = connectDataBase("此处填要执行的SQL语句");//如果是增删改语句,则方法调用不会返回任何结果,但SQL语句已经被执行,如果是查询语句,通过以下方式获取查询到的内容
            if(databasesdr==null)
            {
                return;//如果没有查询到任何内容则返回
            }
            while(databasesdr.Read())//先要调用dataReader.Read();方法才能对dataReader进行读取操作,while循环将遍历所有查询到的记录
            {                
                    string result= databasesdr["此处填数据库字段名"].ToString();//result则为查询到的记录 字段所对应的值 (若是字符型将string改为char,其他类型依次类推)                          
            }
            info.conn.Close();
            databasesdr.Close();

3.对图片类型的数据进行读取并保存到本地

            string str = "select " + "此处填图片存储所对应字段名" + " from  dbo." + dadtabasename + " where  " + col1 + "='" + col1name.ToString() + "'";//where为查询约束条件
            string    connstr = "server=.vip,47165;database=用户信息;Uid=sa;Pwd=1an;Connect Timeout=15";//依次修改参数,分别为服务器名,就是第22步中要填的服务器名,要查询的数据库名,Pwd为sa用户登录所设定的登录密码,最后一参数为连接最长等待时间
            SqlConnection myconn = new SqlConnection(connstr);
            myconn.Open();
            SqlDataAdapter sda = new SqlDataAdapter(str, connstr);
            DataSet myds = new DataSet();                                         
            sda.SelectCommand.CommandTimeout = 5;//设置最长等待时延
            sda.Fill(myds);
            myconn.Close();
            Byte[] Files = (Byte[])myds.Tables[0].Rows[0]["此处填图片存储所对应字段名" ];
            BinaryWriter bw=null;         
             bw = new BinaryWriter(File.Open("此处指定文件的绝对或相对路径并加上取好的文件名记得加上斜杠", FileMode.OpenOrCreate));                            
            bw.Write(Files);
            bw.Close();

4.对音频数据进行读取并播放

            SqlConnection conn;
            SqlConnectionStringBuilder scsb = new SqlConnectionStringBuilder();
            scsb.DataSource = @"此处填上图的服务器名称";
            scsb.UserID = @"sa";
            scsb.Password = "此处填设置的密码";
            scsb.InitialCatalog = "此处填要访问的数据库名";
            //创建连接
            conn = new SqlConnection(scsb.ToString());
            ///打开连接
            if (conn.State != ConnectionState.Open)
            {
                conn.Open();
            }
                if (conn.State != ConnectionState.Open)
                {
                    try
                    {
                        conn.Open();
                    }
                    catch (SqlException E)
                    {               
                    }
                }               
                string databasename = "dbo.wordaudio";//此处指定要查找的数据库名
                string sqlstr = "select wordaudio from " + databasename + " where wordname='" + label1text + ".wav" + "'";//写好要查询的SQL语句
                SqlCommand comm = new SqlCommand(sqlstr, conn);//参数一是SQL语句,参数二是已经打开了的数据库连接对象
                comm.CommandTimeout = 4;
                SqlDataReader sdr;
                try
                {
                    sdr = comm.ExecuteReader();
                }
                catch(SqlException E)
                {
                    
                }
                if (sdr.Read())
                {                    
                    MemoryStream ms = new MemoryStream((byte[])sdr[0]);
                    sp = new SoundPlayer(ms);
                    try
                    {
                        sp.Play();
                    }
                    catch (System.InvalidOperationException ex)
                    {

                    }
                }
                sdr.Close();
            }
           conn.Close();

猜你喜欢

转载自blog.csdn.net/vivi_and_qiao/article/details/88352339
今日推荐