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這個類。