1.C#进行sql查询时候是用参数
在sql语句中,有的时候需要进行参数的动态赋值,比如插入语句中的values的值,但是当value中有单引号,双引号之类的值得时候会产生很多麻烦,而且也会产生sql注入问题,因此,c#提供参数赋值的方法。
例子:
cmd.CommandText = "insert intophone(StartNo,EndNo,Name) values(@StartNo,@EndNo,@Name)";
cmd.Parameters.Clear();
cmd.Parameters.Add(new SqlParameter("StartNo",startNo));
cmd.Parameters.Add(new SqlParameter("EndNo",endNo));
cmd.Parameters.Add(new SqlParameter("Name", 运营商名称+city));
2.数据库查询的完整步骤
1.连接服务器
SqlConnectionthisConnection = new SqlConnection(。。。。);
thisConnection.Open();
2.新建命令
SqlCommandthiscommand = thisConnection.CreateCommand();
3.给问题文本赋值
thiscommand.CommandText= "。。。。。。。"
这里的字符串就是需要执行的sql命令
4.执行命令
分为三种命令,相应调用不同的方法:
1)不需要查询的(插入,更新,删除)
thiscommand.ExecuteNonQuery();
该函数会返回收到影响的总行数。
2)只需要查询一个值的
thiscommand.ExecuteScalar();
该函数会返回使用的sql语言查询的结果
3)需要同时查询得到多个值的
SqlDataReader Reader= thiscommand.ExecuteReader(); //新建一个//SqlDataReader
Reader.Read();//读取一行数据到Reader中
res[0] =(string) Reader["Text"]; //读取
Reader.Close();//关闭Reader
4)关闭连接
thisConnection.Close();
3.在父窗口中调用父窗口中的时间函数,用于刷新父窗口的数据窗格
窗体A有个DataGridView,窗体B调用A,那么:
把窗体A的DataGridView设置为public的
把窗体B的构造写为 public B(A a){ ...}
在A中newB的时候写newB(this).Show();
这时 B中的a就可以访问到DataGridView了
4.C#判断数据库连接是否打开
conn.State ==ConnectionState.Open
5.C#遍历DataSet中数据的几种方法总结
//多表多行多列的情况
foreach(DataTable dt in YourDataset.Tables) //遍历所有的datatable
{
foreach (DataRow dr in dt.Rows) ///遍历所有的行
foreach (DataColumn dc in dt.Columns) //遍历所有的列
Console.WriteLine(“{0},{1}, {2}”, dt.TableName,dc.ColumnName, dr[dc]); //表名,列名,单元格数据
}
//遍历一个表多行多列
foreach(DataRowmDr in dataSet.Tables[0].Rows )
{
foreach(DataColumn mDc indataSet.Tables[0].Columns)
{
Console.WriteLine(mDr[mDc].ToString());
}
}
//遍历一个表多行一列
foreach(DataRow row in DataSet1.Tables[0].Rows)
{
Console.WriteLine(row[0].ToString());
}
//一行一列
ds.Tables[0].Rows[0]["字段"]
6.C# FileStream/StreamWriter/StreamReader的区别
FileStream对象表示在磁盘或网络路径上指向文件的流。这个类提供了在文件中读写字节的方法,但经常使用StreamReader或 StreamWriter执行这些功能。这是因为FileStream类操作的是字节和字节数组,而Stream类操作的是字符数据。这是这两种类的一个重要区别,如果你是准备读取byte数据的话,用StreamReader读取然后用 System.Text.Encoding.Default.GetBytes转化的话,如下,则可能出现数据丢失的情况,如byte数据的个数不对等。因此操作byte数据时要用FileStream。
stringtextContent = fileStream.ReadToEnd();
byte[] bytes =System.Text.Encoding.Default.GetBytes(textContent);
字符数据易于使用, 但是有些操作,比如随机文件访问(访问文件中间某点的数据),就必须由FileStream对象执行.
其中创建FileStream对象最简单的构造函数如下:
FileStream file= new FileStream(fileName,FileMode.Member);
FileStream file = new FileStream(fileName, FileMode.Member, FileAccess.Member);
StreamReader旨在以一种特定的编码输入字符,而Stream 类用于
字节的输入和输出。使用 StreamReader 读取标准文本文件的各行信息。
除非另外指定,StreamReader 的默认编码为 UTF-8,而不是当前系统
的 ANSI 代码页。UTF-8 可以正确处理 Unicode 字符并在操作系统的本地化版本上提供一致的结果。
FileStream处理字节流,采用FileMode.Open将byte通过char转换成文本文件
说明:
Append:如果文件存在则打开文件,将光标移到文件尾部
create打开文件时,如果文件不存在则创建文件,存在则覆盖文件
createnew:打开文件时,如果文件不存在则创建文件,存在则抛出异常
open打开文件时,如果文件不存在则抛出异常
openorcreate存在打开,否则创建
truncate打开现有文件,清楚文件的内容,但原文件的创建日期还在
例子:
1. //StreamWriter写数据
StreamWriter sw= new StreamWriter(textBox1.Text,true,Encoding.UTF8);
sw.Write(textBox2.Text);
2. //filestream读取并显示
FileStreamfstream = new FileStream(textBox1.Text, FileMode.Open);
byte[] buf = new byte[filein.Length];
fstream.Read(buf, 0, buf.Length);
//字节到字符的装换
Decoder d = Encoding.UTF8.GetDecoder();
char[] c = new char[filein.Length];
d.GetChars(buf, 0, buf.Length, c, 0);
//字符数组转换字符串 string为引用类型数组
string s = new string(c);
textBox2.Text = s;
3. //FileStream 和StreamReader合用
FileStreamfstream = new FileStream(textBox1.Text,FileMode.Open,FileAccess.ReadWrite);
StreamReader sr= new StreamReader(fstream);
string s = "";
do
{
s += sr.ReadLine();
}
while (sr.ReadLine() != null);
textBox2.Text = s;
sr.Close();
7. C# 判断OpenFileDialog点击的是确定还是取消按钮
DialogResultresult = op.ShowDialog();
if (result == DialogResult.OK){
//...
}