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软件 听说下载开发板是最好的(开发板如果只是用来学习.研究不算是侵权).在安装的时候,我也遇到了很多问题,在公司的电脑安装第一 ...
随机推荐
- QTP8.2--安装流程
一.安装说明: 1.进入安装文件夹,运行QTP8.2安装文件setup,进入安装向导后直接单击“QuickTest Professional 安装”选项,由于破解文件存在缺陷,所以请不要改变安装路径c ...
- 新手学习FFmpeg - 通过API实现可控的Filter调用链
虽然通过声明[x][y]avfilter=a=x:b=y;avfilter=xxx的方式可以创建一个可用的Filter调用链,并且在绝大多数场合下这种方式都是靠谱和实用的. 但如果想精细化的管理AVF ...
- cp -rf 操作时依然会提示覆盖
在linux上经常会使用cp -rf命令,该命令就是强制覆盖指定目录下的文件,但有时使用该命令依然会提示是否覆盖,cp命令的参数有如下一些: 参数说明: -a:此选项通常在复制目录时使用,它保留链接. ...
- maven war包打包去除jar包瘦身
1.pom文件配置 <!-- war包 --> <plugin> <groupId>org.apache.maven.plugins</groupId> ...
- Nodejs 发送邮件 激活邮箱
1. 安装nodemailer npm install nodemailer 项目中引入nodemailer var nodemailer = require('nodemailer'); 2.QQ邮 ...
- 原创电子书《菜鸟程序员成长之路:从技术小白到阿里巴巴Java工程师》
<菜鸟程序员成长之路:从技术小白到阿里巴巴Java工程师> 国庆节快乐!一年一度长度排第二的假期终于来了. 难得有十一长假,作者也想要休息几天啦. 不管你是选择出门玩,还是在公司加班,在学 ...
- 如何增强VR的vection/self-motion?
上一节讲到了vection是给玩家带来“移动感”的因素,它提供良好VR体验的关键之一.那么VR中我们一般用哪些方式来提供vection呢?1 首先来简单了解一下人体和空间相关的感知机制. 视觉线索 v ...
- 色即是空,空即是色---java有关null的几件小事
故事背景 ---摩诃般若波罗蜜多心经: 观自在菩萨,行深般若波罗蜜多时,照见五蕴皆空,度一切苦厄.舍利子,色不异空,空不异色:色即是空,空即是色.受想行识,亦复如是.舍利子,是诸法空相,不生不灭,不垢 ...
- mac系统Intellij Idea的java环境配置:JDK + Tomcat + Maven
一.JAVA JDK查看与配置 1.查看java路径详细信息: /usr/libexec/java_home -V 2.java默认路径 jdk1.6: /System/Library/Java/Ja ...
- 一文了解 Redis 内存监控和内存消耗
Redis 是一种内存数据库,将数据保存在内存中,读写效率要比传统的将数据保存在磁盘上的数据库要快很多.所以,监控 Redis 的内存消耗并了解 Redis 内存模型对高效并长期稳定使用 Redis ...