1. 程式人生 > >Visual Studio中對本機SQLserver資料庫的操作

Visual Studio中對本機SQLserver資料庫的操作

1.前提條件

要想操作SQLserver資料庫,先檢視本機是否有SQLserver資料庫服務。

在執行框中輸入 services.msc ,檢視所有服務資訊,如果關閉,則開啟,如果沒有,則安裝SQLserver資料庫服務。

沒有的話,就先下載。https://www.microsoft.com/zh-cn/download/details.aspx?id=29066

具體安裝操作看別人的教程。https://www.cnblogs.com/zhangbolg/p/7747641.html

2.用Visual Studio連線資料庫,並操作資料庫

操作sqlserver資料庫,可以用SQLserver Management Studio軟體。但是在Visual studio中可以操作,不用通過另一個軟體了。

如果找不到伺服器資源管理器,則在檢視中開啟。然後右擊資料連線,新增一個連線。

然後就可以自己對資料庫操作了。包括寫sql語句,和檢視操作,及資料檢視。

檢視操作就不說了,很簡單,可以建表,查表,修改表,插入資料,及刪除表。

接下來就寫一下sql語句,右擊資料庫連線,新建一個查詢寫sql語句 

注意:

①最好全用大寫

②表名用中括號[ ]括起來,雖然有時候不用中括號也行(表名是與系統的一些名稱有衝突的話,就要用中括號)

③欄位型別有 int 和 char,但是寫sql語句時int資料也可以用 ' ' 括起來,但是讀取資料時,欄位是什麼型別,讀出來的就是什麼型別,int 不能直接當作 string用。

select * from sysobjects where name='user'   查詢本機user表的所有資訊
select name from sysobjects                  查詢本機所有的表的名字,如果改用*,則是所有資訊
select COUNT(*) from sysobjects              查詢本機所有表的數量
select name from sysobjects where xtype='U'  查詢本機所有使用者表的名字
select name from sysobjects where xtype='S'  查詢本機所有系統表名字

----------------------------------------------------------------------

查詢user表的所有資訊,如果只想檢視user表的欄位名字資訊,把 * 改為 COLUMN_NAME
欄位的資料型別,把 * 改為 DATA_TYPE
欄位的資料長度範圍限制,把 * 改為 CHARACTER_MAXIMUM_LENGTH 
select * from INFORMATION_SCHEMA.COLUMNS where table_name='user'
select COLUMN_NAME,DATA_TYPE,CHARACTER_MAXIMUM_LENGTH from INFORMATION_SCHEMA.COLUMNS where table_name='user'

----------------------------------------------------------------------

delete from a    刪除a表的所有資料記錄,並未刪除該表
drop table a     刪除a表的資料記錄,且刪除了該表,重新整理一次,就看不到a表了

----------------------------------------------------------------------

新建一張 mynewtable 表,主鍵id自增以1開始,每次加1
CREATE TABLE [mynewtable]
(
id int primary key identity(1,1),
name char(20) not null,
age int not null
---- primary key(id)  設定主鍵也可以寫在這個位置。記得前面要加個逗號
)

----------------------------------------------------------------------

user表中,主鍵為id(int),欄位有myname(char(10)) , password(char(10))
select * from [user]
select id,myname,password from [user]
select * from [user] where myname like 'a%'  查詢user表中 myname欄位資料值以a開頭的記錄
select * from [user] order by id desc        查詢user中所有資訊,並以id的值降序排列,預設升序asc
select top 3 * from [user]                   查詢前3條記錄  ,後3條記錄加個降序排列就行了
select top 50percent * from [user]           查詢前50%的記錄

update [user] set password='2018',myname='liuyan' where id='2 '        更新記錄 int的單引號可省略
delete from [user] where id='2'                                        刪除記錄
insert into [user] (id,myname,password) values('66','liuyan','2018');  插入資料 int的單引號可省略

3.在c#程式碼中,操作sqlserver資料庫

注意點:記得要加 try catch語句

資料庫連線封裝類 SQLManage.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data.SqlClient; //要引入名稱空間
using System.Data;

namespace 資料庫操作軟體 {
    class SQLManage {
//sqlstring為資料庫滑鼠右擊的屬性中的連線字串的值
        static String sqlstring = @"Data Source=.;Initial Catalog=liuyan;Integrated Security=True";
        static SqlConnection sqlConnection = new SqlConnection(sqlstring);
        static String databaseName = "";  //資料庫名稱

開啟連線
        public static void OpenSqlServer() {
            if (sqlConnection.State == ConnectionState.Closed) {
                sqlConnection.Open();
                databaseName = sqlConnection.Database;
            }
            else {
                //已開啟
            }
        }
關閉連線
        public static void CloseSqlServer() {
            if (sqlConnection.State == ConnectionState.Open) {
                sqlConnection.Close();
                databaseName = "";
            }
            else {
                //已關閉
            }
        }

查詢 table_name 表的所有資料
        public static String ShowAllInformation(String table_name) {
            SqlCommand cmd;
            String sql_cmd = "select * from ["+table_name+"]";
            String s = "";
//SqlCommand
            using (cmd = new SqlCommand(sql_cmd, sqlConnection)) {
                try {
//SqlDataReader
                    SqlDataReader reader = cmd.ExecuteReader();
//前進到下一條記錄,並取前兩個欄位的值
                    while (reader.Read()) {
                        String s1 = reader.GetString(0);
                        String s2 = reader.GetString(1);
                        s += s1 + "   " + s2 + "\n";
                    }
                    reader.Close();
                }
                catch (Exception e) {
                    return table_name + " 該表不存在";
                }
            }
            return s;
        }

查詢 table_name 表的所有欄位名字
        public static String ShowAllColumnsName(String table_name) {
            String sqlstring = @"SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = '"+table_name+"'";
            SqlCommand sqlcmd = new SqlCommand(sqlstring,sqlConnection);
            SqlDataReader reader = sqlcmd.ExecuteReader();
            String s = "";
            while (reader.Read()) {
                String s1 = reader.GetString(0);
                s += s1 + "\n";
            }
            reader.Close();
            return s;
        }

查詢資料庫的所有使用者表的名字
        public static String showAllTABLEName() {
            String sqlstring = @"SELECT name FROM SYSOBJECTS WHERE xtype='u'";
            SqlCommand cmd = new SqlCommand(sqlstring,sqlConnection);
            SqlDataReader reader = cmd.ExecuteReader();
            String s = "";
            while (reader.Read()) {
                String s1 = reader.GetString(0);
                s += s1 + "\n";
            }
            reader.Close();
            return s;
        }

建表 成功的話sqlcmd.ExecuteNonQuery() == -1
        public static String CreateTable(String table_name) {
            String sqlstring = "CREATE TABLE ["+table_name+ @"]
                                  (
                                        
                                        name1 VARCHAR(50) NOT NULL,
                                        name2 VARCHAR(50) NOT NULL,
                                        id INT PRIMARY KEY IDENTITY(1,1)
                                    )
                                ";
            SqlCommand sqlcmd = new SqlCommand(sqlstring, sqlConnection);
            try {
                if (sqlcmd.ExecuteNonQuery() == -1) {
                    return sqlstring + "\n" + "建立成功";
                }
                else {
                    return "創建出錯,建立失敗";
                }
            }
            catch (Exception e) {
                return sqlstring + "\n" + "建立失敗,已存在";
            }
        }

刪除表 成功的話sqlcmd.ExecuteNonQuery() == -1
        public static String DeleteTable(String table_name) {
            String sqlstring = @"DROP TABLE "+table_name;
            SqlCommand sqlcmd = new SqlCommand(sqlstring , sqlConnection);
            try {
                if (sqlcmd.ExecuteNonQuery() == -1) {
                    return table_name + " 表刪除成功";
                }
                else {
                    return "刪除出錯,刪除失敗";
                }
            }
            catch (Exception e) {
                return "刪除失敗,已刪除";
            }
        }

插入資料  成功的話sqlcmd.ExecuteNonQuery() != -1
        public static String MyTable_InsertData(String mytable ,String n1,String n2) {
            String sqlstring = "INSERT INTO ["+mytable+"] (name1,name2) values('"+n1+"','"+n2+"')";
            SqlCommand cmd = new SqlCommand(sqlstring,sqlConnection);
            try {
                if (cmd.ExecuteNonQuery() != -1) {
                    return mytable + " 表 插入資料 " + n1 + "  " + n2 + " 成功";
                }
                else {
                    return "未知出錯";
                }
            }
            catch (Exception e) {
                return "插入資料失敗或者表不存在";
            }
        }

更新資料 成功的話sqlcmd.ExecuteNonQuery() != -1
        public static String Mytable_UpdateData(String[] conditionColumn_condition__valueColumn_value ) {
            String tablename = conditionColumn_condition__valueColumn_value[0];
            String NAME0 = conditionColumn_condition__valueColumn_value[1]; //條件欄位
            String NAME1 = conditionColumn_condition__valueColumn_value[2]; //條件值
            String NAME2 = conditionColumn_condition__valueColumn_value[3]; //更新欄位
            String NAME3 = conditionColumn_condition__valueColumn_value[4]; //更新值
            String sqlstring = @"UPDATE ["+tablename+"] SET "+ NAME2 +" = '"+ NAME3 +"' WHERE "+ NAME0 +" = '"+ NAME1 +"'";
            SqlCommand cmd = new SqlCommand(sqlstring , sqlConnection);

            try {
                if (cmd.ExecuteNonQuery() != -1) {
                    return NAME0 + "欄位=" + NAME1 + ";的" + NAME2 + " 欄位的值更新為 : " + NAME3 + "更新成功";
                }
                else {
                    return "未知更新錯誤";
                }
            }
            catch (Exception e) {
                return "更新出錯,表不存在或者欄位不存在";
            }
        }

刪除表中的資料
        public static String Mytable_DeleteDate(String[] inputparams) {
            String tablename = inputparams[0];
            String conditionColumn = inputparams[1]; //條件欄位
            String conditionValue = inputparams[2];  //條件值
            String sqlstring = "DELETE FROM ["+tablename+"] WHERE "+conditionColumn+" = '"+conditionValue+"'";
            SqlCommand cmd = new SqlCommand(sqlstring,sqlConnection);
            try {
                if (cmd.ExecuteNonQuery() != -1) {
                    return "刪除成功";
                }
                else {
                    return "未知錯誤,刪除失敗";
                }
            }
            catch (Exception e) {
                return "刪除失敗,表不存在,或者條件不存在";
            }
        }





    }
}

使用舉例,查詢表的欄位名

private void finduserC_btn_Click(object sender, EventArgs e) {
            SQLManage.OpenSqlServer();
            String table_name = Interaction.InputBox("在下方輸入要查詢欄位的表名。", "查欄位", "", -1, -1);
            String s = SQLManage.ShowAllColumnsName(table_name);
            this.showresult.Text = s;
            SQLManage.CloseSqlServer();
        }

4.使用配置檔案

我們上面使用的 String sqlstring是直接賦值的,我們可以將其寫入配置檔案 App.Config,然後獲取。

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <configSections>
    </configSections>
    <connectionStrings>
        <add name="WindowsFormsApp17.Properties.Settings.liuyanConnectionString"
            connectionString="Data Source=.;Initial Catalog=liuyan;Integrated Security=True"
            providerName="System.Data.SqlClient" />

//我們自己寫的一個
      <add name="liuyanDataBase"
           connectionString="Data Source=.;Initial Catalog=liuyan;Integrated Security=True"
           />
    </connectionStrings>
    <startup> 
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.1" />
    </startup>
</configuration>

獲取如下:

String constring = ConfigurationManager.ConnectionStrings["liuyanDataBase"].ToString();
            SqlConnection con = new SqlConnection(constring);
            con.Open();
            String sqls = "SELECT * FROM [USER]";
            SqlCommand cmd = new SqlCommand(sqls,con);
            SqlDataReader reader = cmd.ExecuteReader();
            String s = "";
            while (reader.Read()) {
                String s1 = reader.GetString(0);
                String s2 = reader.GetString(1);
                String s3 = reader.GetInt32(2)+"";
                s += s1 + "  " + s2 + "  " + s3 + "\n";
            }
            MessageBox.Show(s);

記得要先在專案中引入程式集   System.Configuration

然後引入名稱空間  using System.Configuration

之後我們才能使用  ConfigurationManage這個類。