zoukankan      html  css  js  c++  java
  • [asp.net入门]利用ADO.NET处理数据的简单之处

    由于项目需要,要往数据库中导入一些历史数据,而这些历史数据都是线下人工记录的,所以有很多不规范的地方,比如:同一个公司的名称在不同的记录中可能相差那么几个字,而且每条数据不是每个字段都是完整的,等等诸如此类的不规范问题。如何规范化,并且将这些若干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);

    首先当然要打开数据库连接:

    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对数据库进行基本操作就总结完了。

     

  • 相关阅读:
    HTML有2种路径的写法:绝对路径和相对路径
    ZB本地设置
    java main函数
    java static 关键字
    03013_动态页面技术-JSP
    Oracle数据库的文件以及Oracle体系架构
    记录一次mybatis缓存和事务传播行为导致ut挂的排查过程
    rtmp规范1.0全面指南
    程序员小哥教你秋招拿大厂offer
    ubuntu配置samba解决linux的svn使用舒适问题
  • 原文地址:https://www.cnblogs.com/ranzige/p/asp_net_ADO.html
Copyright © 2011-2022 走看看