使用C#编写字符串加密的存储过程!
2007-01-09 09:09
393 查看
在VS2005中新建SQL Server项目,然后编写代码如下:
1using System;
2using System.Data;
3using System.Data.SqlClient;
4using System.Data.SqlTypes;
5using Microsoft.SqlServer.Server;
6using System.Security.Cryptography;
7using System.Text;
8using System.IO;
9
10public partial class StoredProcedures
11{
12 [Microsoft.SqlServer.Server.SqlProcedure(Name="WriteHashedPassword")]
13 public static void WriteHashedPassword(string UserName,string Password)
14 {
15 try
16 {
17 using (SqlConnection cnn = new SqlConnection("Context Connection=true"))
18 {
19 cnn.Open();
20 using (SqlCommand sqlCmd=new SqlCommand())
21 {
22 SHA1Managed sh1 = new SHA1Managed();
23 UnicodeEncoding uEncode = new UnicodeEncoding();
24
25 byte[] txtBytes = uEncode.GetBytes(Password);
26 byte[] hashedPassword = sh1.ComputeHash(txtBytes);
27 string strHash = Convert.ToBase64String(hashedPassword);
28
29 string dm1 = "Insert tbl_User(username) VALUES(@HashAsString)";
30 sqlCmd.Connection = cnn;
31 sqlCmd.CommandText = dm1;
32 sqlCmd.Parameters.Add(new SqlParameter("@HashAsString", SqlDbType.NVarChar, 50));
33 sqlCmd.Parameters[0].Value = strHash;
34 sqlCmd.ExecuteNonQuery();
35 }
36 cnn.Close();
37 }
38 }
39 catch (Exception ex)
40 {
41 FileStream fs = new FileStream(@"c:\YukonCLR.log", FileMode.OpenOrCreate, FileAccess.Write);
42 StreamWriter sw = new StreamWriter(fs);
43 sw.WriteLine(ex.Message);
44 sw.Close();
45 }
46 }
47}
SqlConnection cnn = new SqlConnection("Context Connection=true")),这句与写客户端的ADO.Net程序不同,此处应该算是固定写法吧,是取得上下文的连接,即当前调用此存储过程的连接.
关于调试:
调试用两种方式:
(1)在项目中有一个Test.sql,在里面按TSQL的写法调用存储过程: exec WriteHashedPassword '2','333',即可.
(2)在VS菜单里面的"调试"--"附加到进程",在里面附加到SQLServer进程,然后以各种方式调用存储过程即可,比如在Sql Server Management Studio里面调用存储过程,在VS里面调用,编程调用等等.
关于部署:
使用.Net的调试时会自动进行部署,还可以使用TSQL手动将程序储部署到SQLServer,应该还可以使用安装包的方式吧?
使用.Net编写存储过程是Sql Server2005的新特性,感觉那真是一个爽啊.哈哈,以后可以不用TSQL编写了....
1using System;
2using System.Data;
3using System.Data.SqlClient;
4using System.Data.SqlTypes;
5using Microsoft.SqlServer.Server;
6using System.Security.Cryptography;
7using System.Text;
8using System.IO;
9
10public partial class StoredProcedures
11{
12 [Microsoft.SqlServer.Server.SqlProcedure(Name="WriteHashedPassword")]
13 public static void WriteHashedPassword(string UserName,string Password)
14 {
15 try
16 {
17 using (SqlConnection cnn = new SqlConnection("Context Connection=true"))
18 {
19 cnn.Open();
20 using (SqlCommand sqlCmd=new SqlCommand())
21 {
22 SHA1Managed sh1 = new SHA1Managed();
23 UnicodeEncoding uEncode = new UnicodeEncoding();
24
25 byte[] txtBytes = uEncode.GetBytes(Password);
26 byte[] hashedPassword = sh1.ComputeHash(txtBytes);
27 string strHash = Convert.ToBase64String(hashedPassword);
28
29 string dm1 = "Insert tbl_User(username) VALUES(@HashAsString)";
30 sqlCmd.Connection = cnn;
31 sqlCmd.CommandText = dm1;
32 sqlCmd.Parameters.Add(new SqlParameter("@HashAsString", SqlDbType.NVarChar, 50));
33 sqlCmd.Parameters[0].Value = strHash;
34 sqlCmd.ExecuteNonQuery();
35 }
36 cnn.Close();
37 }
38 }
39 catch (Exception ex)
40 {
41 FileStream fs = new FileStream(@"c:\YukonCLR.log", FileMode.OpenOrCreate, FileAccess.Write);
42 StreamWriter sw = new StreamWriter(fs);
43 sw.WriteLine(ex.Message);
44 sw.Close();
45 }
46 }
47}
SqlConnection cnn = new SqlConnection("Context Connection=true")),这句与写客户端的ADO.Net程序不同,此处应该算是固定写法吧,是取得上下文的连接,即当前调用此存储过程的连接.
关于调试:
调试用两种方式:
(1)在项目中有一个Test.sql,在里面按TSQL的写法调用存储过程: exec WriteHashedPassword '2','333',即可.
(2)在VS菜单里面的"调试"--"附加到进程",在里面附加到SQLServer进程,然后以各种方式调用存储过程即可,比如在Sql Server Management Studio里面调用存储过程,在VS里面调用,编程调用等等.
关于部署:
使用.Net的调试时会自动进行部署,还可以使用TSQL手动将程序储部署到SQLServer,应该还可以使用安装包的方式吧?
使用.Net编写存储过程是Sql Server2005的新特性,感觉那真是一个爽啊.哈哈,以后可以不用TSQL编写了....
相关文章推荐
- 技巧:使用 C# 编写扩展存储过程
- 使用C#编写扩展存储过程
- 使用C#编写SQL Server的扩展存储过程
- 技巧:使用 C# 编写扩展存储过程
- easyui datagrid 禁止选中行 EF的增删改查(转载) C# 获取用户IP地址(转载) MVC EF 执行SQL语句(转载) 在EF中执行SQL语句(转载) EF中使用SQL语句或存储过程 .net MVC使用Session验证用户登录 PowerDesigner 参照完整性约束(转载)
- C# 编写SQL SERVER 2005 的存储过程 (转)
- 带输出参数的存储过程的使用及在C#中调用问题
- C#存储过程使用例子
- 数据库中的存储过程在C#项目中的使用举例
- 使用C#创建SQL Server的存储过程(Visual Studio 2005 + SQL Server 2005)
- 使用C#创建SQL Server的存储过程(Visual Studio 2005 + SQL Server 2005)
- 如何使用 ADO.NET 和 Visual C# .NET 调用带参数的存储过程
- C#与SQL Server存储过程之一(创建):使用C#创建SQL Server的存储过程
- C#与SQL Server存储过程之一(创建):使用C#创建SQL Server的存储过程
- C# clr 存储过程例子(完整从:编译到配置到存储过程的安装部署到使用)
- C#中的类SqlCommand对象使用方法ExecuteNonQuery()调用SQLServer存储过程时,存储过程执行成功,数据发生改变,但是返回-1
- c#使用数据库存储过程的基本方法
- 在C#中使用EntityFramework(EF)生成实体进行存储过程的调用
- 存储过程中使用表值参数(C#)
- 使用C#创建SQL Server的存储过程(1)