C#操作sql server
C#操作sqlserver跟操作其他数据没有太大差别,但是又一些细节要注意一下。
在安装sqlserver时不要选择默认实例,如果是则需要更改设置,还有远程连接要去连接服务中设置一下,如端口1433等,这些百度一下就可以了。下面开始介绍一些最基本的数据库操作。
(一)建立数据库
static void SQLDBCreate(string dbname)
{
//通过连接到本身存在的db master连接到sqlserver
string connStr = "Server = localhost;User Id=sa;Password=******; database = master";
SqlConnection conn = new SqlConnection(connStr);
conn.Open();
//如果当前数据库是正在状态是无法删除的,所以把master设置为当前状态,若数据库存在则删除重建
//此处出问题一般为数据安装过程中为默认实例,改为特定实例,然后启动服务中心,在ip3更改相关ip为本机,并把tcp端口改为1433
//其他更改为是,同时在服务中restart即可以
string sql= "use master;" +
"IF DB_ID(N'{0}') IS NOT NULL " +
"DROP DATABASE {0};" +
"CREATE DATABASE {0}";
sql = string.Format(sql, dbname); try
{
SqlCommand cmd = new SqlCommand(sql, conn);
cmd.ExecuteNonQuery();
Console.WriteLine("createdb_success");
}
catch (Exception ex)
{
Console.WriteLine("createdb_failed:"+ex.Message);
}
finally
{
conn.Close();
}
}
(二)在建立的数据库中建表
static void TableCreate(string dbname,string tablename)
{
string connStr = "Server = localhost;User Id=sa;Password=********; database = {0}";
connStr = string.Format(connStr, dbname);
string sql= "IF OBJECT_ID(N'{1}..{0}', N'U') IS NOT NULL " +
"DROP TABLE {0};" +
"CREATE TABLE {0}" +
"(ID [int] NOT NULL Primary Key," +
"Name [char] (40) NULL ," +
"Price [char] (40) NULL," +
"dPrice [char] (40) NULL)";
sql = string.Format(sql, tablename, dbname);
SqlConnection conn = new SqlConnection(connStr);
conn.Open(); try
{
SqlCommand cmd = new SqlCommand(sql, conn);
cmd.ExecuteNonQuery();
Console.WriteLine("createtable_success");
}
catch(Exception ex)
{
Console.WriteLine("createtable_failed:" + ex.Message);
}
finally
{
conn.Close();
}
}
(三)想表中添加数据
static void FillTable(string dbname,string tablename)
{
string connStr = "Server = localhost;User Id=sa;Password=********; database = {0}";
connStr = string.Format(connStr, dbname);
SqlConnection conn = new SqlConnection(connStr);
conn.Open();
string sql= "INSERT INTO {0}(ID,name,price,dPrice)" +
"values(@d,@a,@b,@c)";
sql = string.Format(sql, tablename);
try
{
for(int i=;i<;i++)
{
SqlCommand cmd = new SqlCommand(sql, conn);
cmd.Parameters.AddWithValue("@d", i);
cmd.Parameters.AddWithValue("@a", Guid.NewGuid());
cmd.Parameters.AddWithValue("@b", i.ToString());
cmd.Parameters.AddWithValue("@c", i.ToString());
cmd.ExecuteNonQuery();
}
Console.WriteLine("filltable_success");
}
catch(Exception ex)
{
Console.WriteLine("filltable_failed:" + ex.Message);
}
finally
{
conn.Close();
}
}
(四)删除表格
static void DeleteTable(string dbname,string tablename)
{
string connStr = "Server = localhost;User Id=sa;Password=*********; database = {0}";
connStr = string.Format(connStr, dbname);
SqlConnection conn = new SqlConnection(connStr);
conn.Open();
string sql= "IF OBJECT_ID(N'{0}..{1}', N'U') IS NOT NULL " +
"DROP TABLE {1};";
sql = string.Format(sql, dbname, tablename);
try
{
SqlCommand cmd = new SqlCommand(sql, conn);
cmd.ExecuteNonQuery();
Console.WriteLine("deletetable_success");
}
catch(Exception ex)
{
Console.WriteLine("deletetable_failed:" + ex.Message);
}
finally
{
conn.Close();
}
}
(五)读取数据库中数据
static void TransToDS(string dbname,string tablename)
{
string connStr = "Server =.;User Id=sa;Password=*******; database = {0}";
connStr = string.Format(connStr, dbname);
SqlConnection conn = new SqlConnection(connStr);
conn.Open(); string sql = "select *from {0}";
sql = string.Format(sql, tablename);
SqlCommand cmd = new SqlCommand(sql, conn);
SqlDataAdapter apt = new SqlDataAdapter(cmd);
SqlCommandBuilder sb = new SqlCommandBuilder(apt);
DataSet ds = new DataSet(); try
{ apt.Fill(ds);
Console.WriteLine("transTods_success");
}
catch (Exception ex)
{
Console.WriteLine("transTods_failed:" + ex.Message);
}
finally
{
conn.Close();
}
DataTable dt = ds.Tables[]; //int i = 0;
//foreach(DataRow dr in ds.Tables[0].Rows)
//{
// if(i>50)
// {
// ds.Tables[0].Rows.RemoveAt(i);
// }
// i++;
//} int count = dt.Rows.Count;
for(int i=;i<count;i++)
{
if(i>)
{
//dt.Rows.RemoveAt(51);
dt.Rows[i].Delete();
}
}
apt.Update(ds); int j = ;
foreach (DataRow dr in ds.Tables[].Rows)
{
Console.WriteLine(dr["Price"]+" "+j+" "+dr.RowState);
j++;
}
}
关于数据操作在此多说一点,可以用sqldatareader进行读取,插入修改数据等也可以采用insert等方法进行处理,在此采用dataset先把数据表缓存到本地表中进行操作,如果只需要。看需要自己选择,采用dataset包括更新数据表等都很方便,只需要用sqldataadapter进行一下update就可以。
注意:
1、在对datatable进行遍历并进行删除操作时,不要用foreach,其不允许进行增加和删除
2、如果数据表需要update,那么数据表进行增删是要用add和delete,不要用import和remove,因为在进行update时,是根据datarow的rowstate属性进行操作的。比如delete时,并不是删除row,而是把相应行的rowstate进行了修改,update时就根据此属性进行处理,本地数据表只有当采用acceptchange时才会根据rowstate属性进行数据表的相应删除。而采用import或者remove时则rowstate属性则会存在问题,比如采用remove时,整行移除后相应的rowstate也不存在,而update时,由于相应的行没有rowstate属性值,所以远程数据库不会进行删除。import倒入后rowstate状态不明,所以也无法进行远程数据库的数据更新。
总之,采用update时并不是拿本地datatable与sqlserver数据表进行对比然后更新,而是根据datatable中的datarow的rowstate属性直接修改sqlserver数据表。
C#操作sql server的更多相关文章
- PHP操作SQL Server 2008/2012
PHP操作SQL Server驱动,微软官方提供2个版本,Version 2.0 和 Version 3.0 Version 2.0 版本支持的操作系统有: Windows Server 2003 S ...
- 使用php来访问操作sql server
使用php来访问操作sql server 在此分成三步走: 第一部:查看配置,下载文件 首先查看自己的php和sql server版本 Php文件输入echo PHP_VERSION 运行脚本就可以 ...
- SQL Server学习之路(七):Python3操作SQL Server数据库
0.目录 1.前言 2.准备工作 3.简单测试语句 4.提交与回滚 5.封装成类的写法 1.前言 前面学完了SQL Server的基本语法,接下来学习如何在程序中使用sql,毕竟不能在程序中使用的话, ...
- Nodejs 操作 Sql Server
Nodejs 操作 Sql Server Intro 最近项目需要爬取一些数据,数据有加密,前端的js又被混淆了,ajax请求被 hook 了,有些复杂,最后打算使用 puppeteer 来爬取数据. ...
- [转]C#操作SQL Server数据库
转自:C#操作SQL Server数据库 1.概述 ado.net提供了丰富的数据库操作,这些操作可以分为三个步骤: 第一,使用SqlConnection对象连接数据库: 第二,建立SqlComman ...
- 数据库SQL Server2012笔记(七)——java 程序操作sql server
1.crud(增删改查)介绍:create/retrieve/update/delete 2.JDBC介绍 1)JDBC(java database connectivity,java数据库连接) 2 ...
- Python 学习笔记:Python 操作 SQL Server 数据库
最近要将数据写到数据库里,学习了一下如何用 Python 来操作 SQL Server 数据库. 一.连接数据库: 首先,我们要连接 SQL Server 数据库,需要安装 pymssql 这个第三方 ...
- ORM之Dapper操作Sql Server和MySql数据库
1.为什么选择Dapper 1)轻量. 2)速度快.Dapper的速度接近与IDataReader,取列表的数据超过了DataTable. 3)支持多种数据库.Dapper可以在所有Ado.net P ...
- 基于Spring Boot,使用JPA操作Sql Server数据库完成CRUD
完成一个RESTful服务,提供几个访问接口,用来操作较简单的联系人信息,数据保存在Sql Server数据库中. 1.使用STS创建工程. 使用STS创建RESTful工程,可以参考: <用S ...
- c#操作SQL Server入门总结
我是一名c#新手.本文只是我是常学习的随笔. 一.下载SQL server软件 听说下载开发板是最好的(开发板如果只是用来学习.研究不算是侵权).在安装的时候,我也遇到了很多问题,在公司的电脑安装第一 ...
随机推荐
- 浅谈Spring的事务隔离级别与传播性
浅谈Spring的事务隔离级别与传播性 这篇文章以一个问题开始,如果你知道答案的话就可以跳过不看啦@(o・ェ・)@ Q:在一个批量任务执行的过程中,调用多个子任务时,如果有一些子任务发生异常,只是回滚 ...
- 打印方案之web打印
前言: 前一段时间在工作中,遇到需要通过打印实现对报表或者工作流清单等事情时,都需要运用到打印功能,那么 ,这个时候你会怎么处理? 在这里,我们可以通过最简单的方式实现web打印功能,简单易懂,方便快 ...
- .Net Core 微服务容器系列基础目录篇
1.开场白 HI,各位老铁,大家端午好,之前写了些关于.net core商城系列的文章,有点乱,今天心血来潮想着整理一下(今天只是先把目录列出来,后面的每篇文章这两天会进行重新修改的,目前先将就看下) ...
- Navicat使用常见的两个问题及解决方法,提高开发效率
Navicat使用常见问题 在我们日常开发过程中,一般不会直接使用命令行来操作 MYSQL 数据库,而会选择一些图形化界面去帮助我们来进行此类操作,常用的有:SQLyog(Logo也是小海豚),Nav ...
- 品Spring:对@PostConstruct和@PreDestroy注解的处理方法
在bean的实例化过程中,也会用到一系列的相关注解. 如@PostConstruct和@PreDestroy用来标记初始化和销毁方法. 平常更多的是侧重于应用,很少会有人去了解它背后发生的事情. 今天 ...
- [经验分享]C# 操作Windows系统计划任务
背景:我做了一个事情是要自己提前创建好很多要定时执行的任务,在我不在的时候自动执行这些程序,以保证我的工作能无人值守,那么我就需要建立系统计划任务来帮我完成这件事情,当然用脑子想想如何实现,很简单,每 ...
- mongodb完整安装
在线下载安装依赖包 yum -y install gcc gcc-c++ yum -y install gcc gcc-c++ ncurses ncurses-devel cmake bison yu ...
- python编程基础之二十五
匿名函数:不用def 定义的函数,没有函数名 lambda只是一个表达式,函数体比def简单的多 lambda的函数体不再是代码块 lambda只有一行,增加运行效率 lambda [参数1][参数2 ...
- UVA - 1160 X-Plosives
A secret service developed a new kind of explosive that attain its volatile property only when a spe ...
- Python小游戏——猜数字教程(random库教程)
今天来开发一个简单的数字逻辑游戏,猜数字(数字炸弹) 首先开发游戏第一件事,了解需求. 猜数字游戏规则: 计算机随机生成一个指定范围的数字,由玩家来猜测, 之后计算机会根据玩家提供数字来与自己生成的数 ...