2013-07-13 30 views
1

當我在插入查詢中使用SQL參數化查詢時,我遇到ENCRYPTBYKEY問題。它只加密和解密第一個字符。ENCRYPTBYKEY sql server 2008只加密第一個字符

這是我的代碼:

sqlParameters[0, 0] = "@DatabaseVersion"; 
    sqlParameters[0, 1] = this.TextBox1.Text.Trim(); 

    queryString = "OPEN SYMMETRIC KEY Sym_password " + 
        "DECRYPTION BY CERTIFICATE Cert_Password WITH PASSWORD  = 'myPassword'" + 
        "Insert Into zz_database_version " + 
        "(" + 
        " DatabaseVersion " + 
        ") " + 
        "Values " + 
        "(" + 
        "ENCRYPTBYKEY(KEY_GUID('Sym_password'), @DatabaseVersion)  " + 
        ") " + 
        "CLOSE SYMMETRIC KEY Sym_password"; 
+0

檢查[this](http://www.codeproject.com/Articles/616114/SQL-Server-T-SQL-Tips-Tricks#tips) – 2013-07-13 16:01:00

+0

非常感謝,但它不是解決方案我需要 –

+0

所以你直接用SQL服務器試試代碼嗎?你有同樣的問題嗎? bty爲什麼你不是一個存儲過程的朋友:)? – 2013-07-14 08:46:47

回答

2

還好還好,打開SQL Server Management Studio中,然後創建一個新的查詢面板(ctrl+n)並創建以下存儲過程(F5運行)

use mydb;--change the workstation to the desire database 
go; 
alter table zz_database_version alter column DatabaseVersion varbinary(8000) not null;--make sure the target field is varbinary too, if is, don't run this command 
go; 
create proc _encrypt(@data varchar(8000)) as begin 
open symmetric key Sym_password certificate Cert_Password with password='myPassword' 
insert zz_database_version(DatabaseVersion) select encryptbykey(key_guid('Sym_password'),@data); 
close symmetric key Sym_password; 
end 

然後在你的C#代碼中調用過程

SqlConnection connection = new SqlConnection("Connection string here"); 
string sp = "_encrypt"; 
SqlCommand spcmd = new SqlCommand(sp, connection); 
// 
spcmd.CommandType = CommandType.StoredProcedure 
// 
SqlParameter theOrderID = new SqlParameter("@data", SqlDbType.String); 
theOrderID = "The value needs to be encrypted"; 
SqlDataReader dr; 
spcmd.Parameters.Add(theOrderID); 
connection.Open(); 
spcmd.ExecuteScalar(); 

反饋任何fai誘餌或成功:)

+0

謝謝:))))))))))))))
我會試試看,並通知你真的非常感謝你。 –