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. 多源最短路径算法—Floyd算法

    前言 在图论中,在寻路最短路径中除了Dijkstra算法以外,还有Floyd算法也是非常经典,然而两种算法还是有区别的,Floyd主要计算多源最短路径. 在单源正权值最短路径,我们会用Dijkstra ...

  2. Linux下查看版本信息

    Linux下如何查看版本信息, 包括位数.版本信息以及CPU内核信息.CPU具体型号等.   1.# uname -a   (Linux查看版本当前操作系统内核信息)   2.# cat /proc/ ...

  3. jquery 动态控制显隐

    1.第1种方法 ,给元素设置style属性 $("#hidediv").css("display", "block"); 2.第2种方法 , ...

  4. 非对称加密openssl协议在php7实践

    据网上资料,RSA加密算法是一种非对称加密算法.在公开密钥加密和电子商务中RSA被广泛使用.RSA是1977年由罗纳德·李维斯特(RON RIVEST).阿迪·萨莫尔(ADI SHAMIR)和伦纳德· ...

  5. sql中的 where 、group by 和 having 用法解析

    --sql中的 where .group by 和 having 用法解析 --如果要用到group by 一般用到的就是“每这个字” 例如说明现在有一个这样的表:每个部门有多少人 就要用到分组的技术 ...

  6. CSS ellipsis 与 padding 结合时的问题

    CSS 实现的文本截断 考察如下代码实现文本超出自动截断的样式代码: .truncate-text-4 { overflow: hidden; text-overflow: ellipsis; dis ...

  7. 02-19 k近邻算法(鸢尾花分类)

    [TOC] 更新.更全的<机器学习>的更新网站,更有python.go.数据结构与算法.爬虫.人工智能教学等着你:https://www.cnblogs.com/nickchen121/ ...

  8. for循环练习题1——水仙花数

    /*输出所有的水仙花数,所谓水仙花数是指一个3位数,其各个位上数 字立方和等于其本身. 例如: 153 = 1*1*1 + 3*3*3 + 5*5*5 */class ForTest3{ public ...

  9. B站自动刷弹幕

    B站自动填弹幕(附带createEvent消息机制) 昨晚看的比赛真的要气死我.RNG 居然又输了... 为了LPL...我写了一个为LPL加油的脚本.希望大家能和我一起为LPL加油! 脚本代码如下: ...

  10. PHP array_udiff_assoc

    1.函数的参数:返回数组的差集,比较时包括键值. 2.函数的参数: @params array $array @params array $array1 @params array $array2 . ...