[asp.net入门]利用ADO.NET处理数据的简单之处
2013-11-25 19:19
477 查看
由于项目需要,要往数据库中导入一些历史数据,而这些历史数据都是线下人工记录的,所以有很多不规范的地方,比如:同一个公司的名称在不同的记录中可能相差那么几个字,而且每条数据不是每个字段都是完整的,等等诸如此类的不规范问题。如何规范化,并且将这些若干excel表格的数据切分并且导入到数据库中的若干表中,并且这些表之间有着一对一或者一对多等关系,识别这些关系仅仅靠SQL是不行的,存储过程我也不了解,不知道能否满足需求。但是用c#加ADO.NET操作SQLServer还是很方便的,所以就决定使用C#。
下面列出一些比较常用的而且很方便的函数,还有一些常用的用c#操作数据库写法。
对于Excel表格,我直接将里面的数据copy到txt里面,这个过程中Excel表格一行中的每两个格子之间会自动添加制表符,然后利用c#的File类的静态方法一次性读取所有行:
string[] applycontract_origin = File.ReadAllLines("D:/1.txt");
这个用来读取文本再方便不过了,只需要一句话即可。
c#操作SQLServer的常用方法:
private static string connStr = "Server=127.0.0.1;database=test;UID=sa;PWD=123456";
private static SqlConnection conn = new SqlConnection(connStr);
首先当然要打开数据库连接:
这是连接字符串和创建连接的代码,下面是选取数据的代码:
string selectLeaderCompany = @"select * from company_info";
SqlDataAdapter dataAdapter = new SqlDataAdapter(selectLeaderCompany, conn);
DataSet ds = new DataSet();
dataAdapter.Fill(ds);
return ds;
下面是插入数据的写法:
string insertsql = "insert into tb_company_info (COMPANY_NM,REG_DATE) values('@name,getdate())" + ";select SCOPE_IDENTITY() as 'Identity'";SqlCommand insertCmd = new SqlCommand(insertsql, conn);SqlParameter p1 = new SqlParameter("@name", SqlDbType.VarChar,200);string name = "ssss";p1.Value = name;insertCmd.Parameters.Add(p1);string newid = insertCmd.ExecuteScalar().ToString();
这里需要注意的是如果要获取插入数据的自增长ID,那么就要加入select SCOPE_IDENTITY(),获取自增长ID的方法有三种,要根据自己的需要选择合适的方法,SCOPE_IDENTITY、IDENT_CURRENT 和 @@IDENTITY都可以获取,具体区别在这里我就不细说了,网上相关资料很多。
如果不需要返回自增长ID,就如下执行:
删除和更新操作都和插入数据的写法一样,只需要更改sql语句即可。
对于选取数据的操作获取的DataSet,可以在程序里动态添加数据:
string selectLeaderCompany = @"select * from tb_company_info";
SqlDataAdapter dataAdapter = new SqlDataAdapter(selectLeaderCompany, conn);
DataSet ds = new DataSet();
dataAdapter.Fill(ds);
DataRow newRow = ds.Tables[0].NewRow();
newRow["columname"] = "newValue";
...
ds.Tables[0].Rows.Add(newRow)
构造新的Row的时候如上述方法构造,不能使用构造函数,我觉得原因在于构造函数没法定义新行的列结构,而通过已经存在的Table构造新行就可以使用它的结构来初始化新行。
程序的最后别忘了关闭连接:
如果想插入null数据,那么请使用:
p[7].Value = DBNull.Value;//p是sqlparameter类型的数组
对于:
private static SqlParameter amount = new SqlParameter("@amount", SqlDbType.Decimal);
上面的Decimal类型,可以如下设置精度:
这样一来,利用ADO.NET对数据库进行基本操作就总结完了。
下面列出一些比较常用的而且很方便的函数,还有一些常用的用c#操作数据库写法。
对于Excel表格,我直接将里面的数据copy到txt里面,这个过程中Excel表格一行中的每两个格子之间会自动添加制表符,然后利用c#的File类的静态方法一次性读取所有行:
string[] applycontract_origin = File.ReadAllLines("D:/1.txt");
这个用来读取文本再方便不过了,只需要一句话即可。
c#操作SQLServer的常用方法:
private static string connStr = "Server=127.0.0.1;database=test;UID=sa;PWD=123456";
private static SqlConnection conn = new SqlConnection(connStr);
首先当然要打开数据库连接:
conn.Open();
这是连接字符串和创建连接的代码,下面是选取数据的代码:
string selectLeaderCompany = @"select * from company_info";
SqlDataAdapter dataAdapter = new SqlDataAdapter(selectLeaderCompany, conn);
DataSet ds = new DataSet();
dataAdapter.Fill(ds);
return ds;
下面是插入数据的写法:
string insertsql = "insert into tb_company_info (COMPANY_NM,REG_DATE) values('@name,getdate())" + ";select SCOPE_IDENTITY() as 'Identity'";SqlCommand insertCmd = new SqlCommand(insertsql, conn);SqlParameter p1 = new SqlParameter("@name", SqlDbType.VarChar,200);string name = "ssss";p1.Value = name;insertCmd.Parameters.Add(p1);string newid = insertCmd.ExecuteScalar().ToString();
这里需要注意的是如果要获取插入数据的自增长ID,那么就要加入select SCOPE_IDENTITY(),获取自增长ID的方法有三种,要根据自己的需要选择合适的方法,SCOPE_IDENTITY、IDENT_CURRENT 和 @@IDENTITY都可以获取,具体区别在这里我就不细说了,网上相关资料很多。
如果不需要返回自增长ID,就如下执行:
insertCmd.ExecuteNonQuery();
删除和更新操作都和插入数据的写法一样,只需要更改sql语句即可。
对于选取数据的操作获取的DataSet,可以在程序里动态添加数据:
string selectLeaderCompany = @"select * from tb_company_info";
SqlDataAdapter dataAdapter = new SqlDataAdapter(selectLeaderCompany, conn);
DataSet ds = new DataSet();
dataAdapter.Fill(ds);
DataRow newRow = ds.Tables[0].NewRow();
newRow["columname"] = "newValue";
...
ds.Tables[0].Rows.Add(newRow)
构造新的Row的时候如上述方法构造,不能使用构造函数,我觉得原因在于构造函数没法定义新行的列结构,而通过已经存在的Table构造新行就可以使用它的结构来初始化新行。
程序的最后别忘了关闭连接:
conn.Close();
如果想插入null数据,那么请使用:
p[7].Value = DBNull.Value;//p是sqlparameter类型的数组
对于:
private static SqlParameter amount = new SqlParameter("@amount", SqlDbType.Decimal);
private static SqlParameter amount = new SqlParameter("@amount", SqlDbType.Decimal);
上面的Decimal类型,可以如下设置精度:
amount.Precision = 18; amount.Scale = 2;
这样一来,利用ADO.NET对数据库进行基本操作就总结完了。
相关文章推荐
- BackTrack5 升级Metasploit至Git更新的方法
- 【认识aspx】页面处理程序【页面生成关系】【页面继承关系】
- 在Win2003、Win7、XP中配置IIS搭建ASP.NET Web网站或应用程序
- 在 Visual Studio 2010 中创建 ASP.Net Web Service
- (转)在ASP.NET MVC3 中利用Jsonp跨域访问
- Asp.net后台调用js 2种方法
- IIS6.0asp网站文件上传大小限制和图片上传大小的限制解决方法
- Asp.net Mvc Ajax JsonResult简单使用
- 转载自新浪博客关于 asp或者SHTML 中 # include file/virtual的使用区别
- asp.net 数据绑定 -- 时间格式
- MindFusion Pack for ASP.NET发布v2013.R2
- [ASP.NET] Session 详解
- asp.net清除页面缓存防止同时登录
- MindFusion Pack for ASP.NET发布v2013.R2
- 最好的ASP.NET虚拟主机安全配置
- windows2003 asp.net 安全设置
- 大众点评api接口 asp.net实例
- Asp.Net Web API 2第三课——.NET客户端调用Web API
- ASP.NET使用NPOI加载Excel模板并导出下载
- ASP.NET && 实验六 && ADO.NET数据库访问技术(一)