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的更多相关文章

  1. PHP操作SQL Server 2008/2012

    PHP操作SQL Server驱动,微软官方提供2个版本,Version 2.0 和 Version 3.0 Version 2.0 版本支持的操作系统有: Windows Server 2003 S ...

  2. 使用php来访问操作sql server

    使用php来访问操作sql server 在此分成三步走: 第一部:查看配置,下载文件 首先查看自己的php和sql server版本 Php文件输入echo PHP_VERSION  运行脚本就可以 ...

  3. SQL Server学习之路(七):Python3操作SQL Server数据库

    0.目录 1.前言 2.准备工作 3.简单测试语句 4.提交与回滚 5.封装成类的写法 1.前言 前面学完了SQL Server的基本语法,接下来学习如何在程序中使用sql,毕竟不能在程序中使用的话, ...

  4. Nodejs 操作 Sql Server

    Nodejs 操作 Sql Server Intro 最近项目需要爬取一些数据,数据有加密,前端的js又被混淆了,ajax请求被 hook 了,有些复杂,最后打算使用 puppeteer 来爬取数据. ...

  5. [转]C#操作SQL Server数据库

    转自:C#操作SQL Server数据库 1.概述 ado.net提供了丰富的数据库操作,这些操作可以分为三个步骤: 第一,使用SqlConnection对象连接数据库: 第二,建立SqlComman ...

  6. 数据库SQL Server2012笔记(七)——java 程序操作sql server

    1.crud(增删改查)介绍:create/retrieve/update/delete 2.JDBC介绍 1)JDBC(java database connectivity,java数据库连接) 2 ...

  7. Python 学习笔记:Python 操作 SQL Server 数据库

    最近要将数据写到数据库里,学习了一下如何用 Python 来操作 SQL Server 数据库. 一.连接数据库: 首先,我们要连接 SQL Server 数据库,需要安装 pymssql 这个第三方 ...

  8. ORM之Dapper操作Sql Server和MySql数据库

    1.为什么选择Dapper 1)轻量. 2)速度快.Dapper的速度接近与IDataReader,取列表的数据超过了DataTable. 3)支持多种数据库.Dapper可以在所有Ado.net P ...

  9. 基于Spring Boot,使用JPA操作Sql Server数据库完成CRUD

    完成一个RESTful服务,提供几个访问接口,用来操作较简单的联系人信息,数据保存在Sql Server数据库中. 1.使用STS创建工程. 使用STS创建RESTful工程,可以参考: <用S ...

  10. c#操作SQL Server入门总结

    我是一名c#新手.本文只是我是常学习的随笔. 一.下载SQL server软件 听说下载开发板是最好的(开发板如果只是用来学习.研究不算是侵权).在安装的时候,我也遇到了很多问题,在公司的电脑安装第一 ...

随机推荐

  1. 通过python代码对域名ssl证书进行监控

    根据公司要求,要求用zabbix对域名的ssl证书进行到期监控 直接上代码 #!/usr/bin/env python3 from urllib3.contrib import pyopenssl f ...

  2. 深入探究js中的隐式变量声明

    前两天遇到的问题,经过很多网友的深刻讨论,终于有一个相对可以解释的通的逻辑了,然后我仔细研究了一下相关的点,顺带研究了一下js中的隐式变量. 以下文章中提到的隐式变量都是指没有用var,let,con ...

  3. mybatis批量插入应用

    一.foreach简单介绍 foreach的主要用在构建in条件中,它可以在SQL语句中进行迭代一个集合. foreach元素的属性主要有item,index,collection,open,sepa ...

  4. linux查看cpu核数和内存指令

    # 总核数 = 物理CPU个数 X 每颗物理CPU的核数 # 总逻辑CPU数 = 物理CPU个数 X 每颗物理CPU的核数 X 超线程数 # 查看物理CPU个数 cat /proc/cpuinfo| ...

  5. thymeleaf 设置display样式

    使用th:style标签: th:style="'display:' + @{(${value} ? 'none' : 'inline-block')} + ''" 其中value ...

  6. SUSE Storage6 环境搭建详细步骤 - Win10 + VMware WorkStation

    学习 SUSE Storage 系列文章 (1)SUSE Storage6 实验环境搭建详细步骤 - Win10 + VMware WorkStation (2)SUSE Linux Enterpri ...

  7. 微信小程序 实现多行文字 超出部分省略号显示

    在开发小程序: 澳买 的 时候 遇到一个棘手的问题: 当搜索澳洲产品,获取产品列表的时候,有时候产品的名称翻译成中文特别长 我们不能全部在有限的列表里面把产品名都显示出来,这样格式不好控制,显示 出来 ...

  8. 快学Scala 第十三课 (类型层级,对象相等性)

    Scala 类型层级: 对象相等性: 和Java一样要重写equals方法和hashcode方法 class Student(val id: Int, val name: String) { over ...

  9. MongoDB 学习笔记之 Aggregation Pipeline

    Aggregation Pipeline: 常用操作符介绍: $project:包含.排除.重命名和显示字段 $match:查询,需要同find()一样的参数 $limit:限制结果数量 $skip: ...

  10. Eclipse的Debug各种视图介绍(二)

    本文链接:https://blog.csdn.net/u011781521/article/details/55000066    http://blog.csdn.net/u010075335/ar ...