C# in VS
1. DllImport是System.Runtime.InteropServices命名空间下与与非托管相关的一个属性类,负责导出从非托管的dll中导出函数信息,导出的函数在声明时必须有extern修饰;copy的dll文件可以放置在System32目录(在import时可以不写路径)。
2.Marshal类可以实现托管和非托管的相互转换,它的命名空间也是System.Runtime.InteropServices,已用过Marshal.PtrToStringAnsi方法。
3.鼠标钩子WH_MOUSE_LL和WH_MOUSE的区别:
前者可以截获所有模块的鼠标事件,后者只能截获监控钩子所在模块的鼠标事件。全局hook应在一个独立的dll中。
4.解决方案solution里有多个projects,其中一个project用到另一个project里的类,需要在此project中右键add reference,再用using加命名空间的形式添加对类的引用;需要编译成DLL的project,其property的输出类型应为Class Library。
5.往数据库的表中插入新行。
//方法一:用DataAdapter方法,优点:不用写insert语句且不用关心values后边的各字段的形式,如要不要加单引号之类的;缺点:插入一条记录的效率不及写单纯insert语句 SqlConnection conn = ConnectDB(server, db); string sql = "select * from " + tableName; SqlDataAdapter da = new SqlDataAdapter(sql, conn); SqlCommandBuilder scb = new SqlCommandBuilder(da);//SqlCommandBuilder根据insertCommand构造 updatecommand和deletecommand DataTable dt = new DataTable(); exeTable(conn, dt, sql); DataRow dr = dt.NewRow(); dr.ItemArray = columnValues; dt.Rows.Add(dr); da.Update(dt); conn.Close(); // 方法二:单纯写insert语句插入一条记录,优点:单条数据插入效率高 缺点:需要注意sql语句的构造和sql语句中参数的类型 string sql = "insert into 表名 values(" + 值1+ "," + 值2+ ",'" + 值3+ "',"+ 值4+ "," + 值5+ "," + 值6+",@参数1,'" + 值7+ "','"+ 值8+ "')"; SqlParameter param = new System.Data.SqlClient.SqlParameter("@参数1", SqlDbType.Image); param.Value = 值9; SqlConnection conn = sqlHelper.ConnectDB(); SqlCommand cmd = new System.Data.SqlClient.SqlCommand(sql, conn); if (param != null) cmd.Parameters.Add(param); cmd.ExecuteNonQuery(); conn.Close(); //方法三:插入大批量数据时用SqlBulkCopy,单条记录插入效率较慢 DataTable dt = new DataTable(); dt.Columns.Add("列名1", typeof(string)); dt.Columns.Add("列名2", typeof(byte[])); DataRow dr = dt.NewRow(); dr["列名1"] = 值1; dr["列名2"] = 值2; dt.Rows.Add(dr); dr = dt.NewRow(); dr["列名1"] = 值3; dr["列名2"] = 值4; dt.Rows.Add(dr); SqlBulkCopy bulk = new System.Data.SqlClient.SqlBulkCopy(conn); bulk.DestinationTableName=目标表名; bulk.BatchSize=dt.Rows.Count; bulk.ColumnMappings.Add("列名1",目标列名1); bulk.ColumnMappings.Add("列名2",目标列名2); bulk.WriteToServer(dt); bulk.Close(); conn.Close();
6.更新数据表某一行的字段值
public static void UpdateFieldValue(string tableName,int rowIndex,Dictionary<string,object> dic_column_value) { SqlConnection conn = ConnectDB(); string sql = "select * from " + tableName; SqlDataAdapter da = new SqlDataAdapter(sql, conn); SqlCommandBuilder scb = new SqlCommandBuilder(da); da.UpdateCommand = scb.GetUpdateCommand(); DataSet dataset = new DataSet(); da.Fill(dataset,tableName); //更新字段值 foreach(KeyValuePair<string,object> kvp in dic_column_value) { dataset.Tables[].Rows[rowIndex][kvp.Key] = kvp.Value; } da.Update(dataset,tableName); conn.Close(); }
7.修改文本文件某一行数据的两种方法。
1)File类
//找到setLocation string[] ary = File.ReadAllLines(path, Encoding.Default); ary = ary.Select(t => t.Trim().StartsWith("setLocation") ? setLocation : t.Trim()).ToArray(); File.WriteAllLines(path, ary, Encoding.Default);
2)StreamReader类
string text = ""; using (StreamReader reader = new StreamReader(path, Encoding.Default)) { string line = reader.ReadLine(); while (line != null) { //如果这一行以setLocation开始,就替换原来的信息 if (line.StartsWith("setLocation")) { line = setLocation; } text += line + "\r\n"; line = reader.ReadLine(); } reader.Close(); reader.Dispose(); } //写入流,更新数据 using (StreamWriter writer = new StreamWriter(path)) { writer.Write(text); writer.Close(); writer.Dispose(); }
8.查询DataTable
DataTable dt_New = sourceTable.Clone(); DataRow[] drs = sourceTable.Select(filter); foreach (DataRow dr in drs) { dt_New.Rows.Add(dr.ItemArray); } return dt_New;
9.linq取DataTable某一列数据返回给一个List<int>。
var list =dt.AsEnumerable().Select<DataRow, int>(x => Convert.ToInt32(x["列名"])).ToList<int>();
10.取dictionary<key,double>中value按升序排列的第一个key值。
var minValueKey=(from d in dic orderby d.Value ascending select d.Key).First()
11.利用sqlserver 提供的bcp.exe插入数据。
class bcpHelper { public static StreamWriter SW_log { get; set; } static string bcpExePath = Environment.GetEnvironmentVariable("programfiles")+ @"\Microsoft SQL Server\100\Tools\Binn\bcp.exe"; public static void BatchInsertProcess(string dbName,string svName,string sourceFile,string targetTable, string errorFile,string outBcpFile) { //-c则要求要插入的文件编码为ascii编码,-w则为Unicode string args = "["+dbName+"]" + ".." +"["+ targetTable+"]" + " in \"" + sourceFile + "\"" + " -S " + svName + " -T -w -t \",\" -e \""+errorFile+"\" -o \""+outBcpFile+"\""; shellHelper.executeShellCmd(bcpExePath, args); //判断bcp是否成功 FileInfo fi = new FileInfo(errorFile); ) { Console.WriteLine("Error:Fail to process bcp!"); txtWriteHelper.AppendLog(SW_log, "Error:Fail to process bcp!"); } } }
12.Math中的取整方法
Floor:向下取整,只取整数部分;
Round:四舍六入,遇到五则取偶数;
Ceiling:向上取整,只要小数部分大于等于一,均往上加一。
随机推荐
- angular的promise理解
promise承诺是angular的一个重点部分,是一种异步处理值(或非值)的方法.一般程序是从上至下执行,遇到某个地方需要花点时间,就干等着把这个地方执行完了,才继续做下一个,看着有点笨蛋.而pro ...
- NSUserDefaults 简介,使用 NSUserDefaults 存储自定义对象
摘要: NSUserDefaults适合存储轻量级的本地数据,一些简单的数据(NSString类型的)例如密码,网址等,NSUserDefaults肯定是首选,但是如果我们自定义了一个对象,对象保存的 ...
- python os模块(2)
os模块主要用于:目录.文件(删除.判断.分割文件名和后缀) 目录 (1)获取当前目录(2)修改目录(3)生成目录(4)删除目录(5)查看目录下的内容(6)重命名目录(7)修改时间属性(8)链接目录( ...
- EF CodeFirst 关系配置
自从开始学习asp.net mvc采用code first以来,关系配置就没有搞清楚过!(⊙﹏⊙)b 笔记之前先感谢以下文章和博主,对他们表示崇拜,由浅入深.举例恰当.拨云见日.茅塞顿开,还有什么词, ...
- 事件委托和JQ事件绑定总结
事件委托: 比喻:事件委托的事例在现实当中比比皆是.比如,有三个同事预计会在周一收到快递.为签收快递,有两种办法:一是三个人在公司门口等快递:二是委托给前台MM代为签收.现实当中,我们大都采用委托的方 ...
- rgba()兼容IE8
CSS: //一般的高级浏览器都支持 background: rgba(255,255,255,0.1); //IE8下 filter:progid:DXImageTransform.Microsof ...
- 《C++ Primer》学习笔记【第一部分 C++基础】
第2章 整型的赋值:当我们试着把一个超出其范围的值赋给一个指定类型的对象时,结果如何?答案取决于类型是signed还是unsigned的.对于unsigned,编译器会将该值对unsigned类型的 ...
- Java多线程初探
多线程 单线程的程序只有一个顺序执行流.多个顺序流之间互不干扰. 多线程的创建 定义Thread类的子类,重写该类的run()方法. 创建Thread子类的实例. 调用线程对象的start()方法来启 ...
- Datatable+Springmvc+mybatis(分页+排序+搜索)_Jquery
一.简介 通过Jqury的Datatable插件,构造数据列表,并且增加或者隐藏相应的列,已达到数据显示要求.同时, jQuery Datatable 强大的功能支持:排序,分页,搜索等. 二.前台分 ...
- NFC
NFC手机是指带有NFC模块的手机.带有NFC模块的手机可以做很多相应的应用.NFC是Near Field Communication缩写,即近距离无线通讯技术.在13.56MHz频率运行于20厘米距 ...