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这个类。
本文由VS软件圈(vssoft.net)发布,不代表VS软件圈立场,转载联系作者并注明出处:https://vssoft.net/vsazwt/VS2008anzhuangwenti/2020/0722/1854.html