数据库中数据的导入导出
在使用一些数据库时,很多时候都要将文件导入导出到指定的文件夹中;
数据的导入导出就必须用到stream函数,这就必须用到Using System.IO的命名空间;
**在数据库的连接问题上,不要每次都重新创建连接,因为它是非常耗时的;
eg one :
private void button1_Click(object sender, EventArgs e)
{ if (odfImport.ShowDialog() == DialogResult.OK) { using (FileStream fileStream = File.OpenRead(odfImport.FileName)) { using (StreamReader streamReader = new StreamReader(fileStream)) { string Line = null; while ((Line = streamReader.ReadLine()) != null) { string[] strs = Line.Split(' '); string name = strs[1]; int age = Convert.ToInt32(strs[2]); string connection = "Data Sources=zhanghui; Initial Catalog=Ahui;User ID=sa;Pwd=111;"; using (SqlConnection conn = new SqlConnection(connection)) { conn.Open(); using (SqlCommand cmd = conn.CreateCommand()) { cmd.CommandText = "Insert into T_User(Name,Age) values(@Name,@Age)"; cmd.Parameters.Clear(); cmd.Parameters.Add(new SqlParameter("Name", name)); cmd.Parameters.Add(new SqlParameter("Age", age)); cmd.ExecuteNonQuery(); } } } } } } MessageBox.Show(@"插入成功"); }二:读取配置中的连接字符串
一:添加App.config文件
在资源管理器中的----引用中右键就可以添加------找到system.configuration
二:在app.config文件中添加
<configuration>
<add name=”ConStr”connectionString=”Data Source=zhanghui; Initial Catalog=Ahui; User ID=sa; Pwd=111”/>
</configuration>
三:在主函数中引用
string ConStr=configurationMangager.configurationString[“ConStr”].configurationString;
eg one:
//数据库连接字符串
string connString = ConfigurationManager.ConnectionStrings["ConStr"].ConnectionString; //string connString = "Data Source=zhanghui; Initial Catalog=Ahui; User ID=sa; Pwd=111"; //string connString = @"Data Source=(LocalDB) 11.0; AttachDbFilename=""D:\VS2008\Projects\ADO.NET\ado.net文件\Database1.mdf""; Integrated Security=True;User Instance=True"; //string con = @"Data Source=(LocalDB)\v11.0;AttachDbFilename='D:\VS2008\Projects\ADO.NET\ado.net 文件\Database1.mdf ';Integrated Security=True;User Instance=True"; //创建数据库连接 SqlConnection conn = new SqlConnection(connString); //打开数据库 conn.Open(); Console.WriteLine("打开成功"); Console.ReadKey();app.config文件
<connectionStrings>
<add name="ConStr" connectionString="Data Source=zhanghui; Initial Catalog=Ahui; User ID=sa; Password=111 "/> </connectionStrings>在程序中要学会使用配置文件,这样字程序就会变得很容易执行。
学习封装
//params 可变的参数,用其定义的变量的数是可变的,常用在多个数的传参的时候。 封装的意思就是将程序中经常用到的代码放在一个方法中,用的时候直接调用就行。
DataSet
每次读取数据都需要创建连接数据库,和麻烦,我们可以创建一个类,将其封装起来,用的时候直接调用就行。这样子就方便了很多。
SqlDataSet是连接相关的,SqlDataSet中的查询结果并不是放到程序中的,而是放在数据库的服务器上的,而这个SqlDataSet就相当于一个指针
只能读取当前指向的行,一担和数据库断开连接就不能再读取。{好处:无论读取的数据有多少条对于程序占用的内存几乎没有什么影响。
}
SqlDataAdapter是DataSet和数据库之间的连接的桥梁,数据集DataSet包含若干表DataTable,而DataTable里面包含若干行,DataRow。
eg:
当数据库开一定的时间,要重启一下,在使用。
对于数据库来说,连接是非常宝贵的资源,用完之后一定要dispose掉。
DataSet的更新
一:利用到了Update的修改,这样子就能修改到服务器里面的数据。
//下面的两个修改只是修改了本地内存中存储的数据,没能修改到服务器里面的数据。 row["UserName"] = "huoooo"; //修改服务器里面的数据,就要用到VS里面内置的"Update"来修改; SqlCommandBuilder builder = new SqlCommandBuilder(adapter); adapter.Update(dataset);
MessageBox.Show("修改成功");
二:可空的数据类型
正确的表示:
string s1=null;
int i1=0;
错误的表示:int i2=null;
修改后的可空数据类型:int? i1=null;
int? i2=0;
// :int?—>可空的int,解决数据库和C#对于int是否可以为null的不同所设置。
三:弱类型的坏处
1:只能取出列名,而且只能在前台显示的时候看到。
2:取到的字段是object类型,要使用的话要进行类型转换。
3:数据绑定很麻烦,无法使用ASP.NET等快速开发工具。
四:DataSet的要点
1:这个数据集可以理解为一个简单的数据库,这个数据库在计算机内存中保存,可以对其进行修改,之后通过程序在将其更新到服务器中。【数据集是独立于任何数据库的】
2:【DataSet数据集】的作用是临时存储数据,【DataAdapter数据适配器】的作用是把数据集和服务器的数据进行替换,更新。
五:使用using语句
1:不用关闭数据库,using自动就关闭了,很方便。using语句容许程序员指定资源的对象应当何时释放资源,该语句定义了一个范围,在此结束时就将其释放。
using()
{
//打开数据连接。
}