我有一个ssis脚本在visual studio中运行来计算列的哈希值,但只有在这个特定情况下,当其中一个列发生更改时,哈希不会改变。我不知道为什么。我指的是HashString计算。
它正在处理其余的表,我们有15个其他表,我们运行类似的代码。
代码:
private int seq = 1;
public override void Input0_ProcessInputRow(Input0Buffer Row)
{
string Separator = ";";
string RowData = "";
string LoadSourceString = "DBNAME";
string HashOne;
string HashTwo;
string HashThree;
string HashFour;
string HashFive;
string HashSix;
string HashSeven;
string HashEight;
string HashDiff;
string HashString;
string HashNoSpace;
HashString = (
//(Row.CUSTOMERID_IsNull ? "" : Row.CUSTOMERID.ToString()).Trim() + Separator +
(Row.CUSTOMERPOREF_IsNull ? "" : Row.CUSTOMERPOREF.ToString()).Trim() + Separator +
(Row.CONTACTFIRSTNAME_IsNull ? "" : Row.CONTACTFIRSTNAME.ToString()).Trim() + Separator +
(Row.CONTACTLASTNAME_IsNull ? "" : Row.CONTACTLASTNAME.ToString()).Trim() + Separator +
(Row.CONTACTPOSITION_IsNull ? "" : Row.CONTACTPOSITION.ToString()).Trim() + Separator +
(Row.CONTACTHONORIFIC_IsNull ? "" : Row.CONTACTHONORIFIC.ToString()).Trim() + Separator +
(Row.CONTACTSALUTATION_IsNull ? "" : Row.CONTACTSALUTATION.ToString()).Trim() + Separator +
(Row.CONTACTPHONE_IsNull ? "" : Row.CONTACTPHONE.ToString()).Trim() + Separator +
(Row.CONTACTFAX_IsNull ? "" : Row.CONTACTFAX.ToString()).Trim() + Separator +
(Row.SHIPTOADDRNO_IsNull ? "" : Row.SHIPTOADDRNO.ToString()).Trim() + Separator +
(Row.FREEONBOARD_IsNull ? "" : Row.FREEONBOARD.ToString()).Trim() + Separator +
(Row.SHIPVIA_IsNull ? "" : Row.SHIPVIA.ToString()).Trim() + Separator +
(Row.TERRITORY_IsNull ? "" : Row.TERRITORY.ToString()).Trim() + Separator +
//(Row.SALESTAXGROUPID_IsNull ? "" : Row.SALESTAXGROUPID.ToString()).Trim() + Separator +
//(Row.SALESREPID_IsNull ? "" : Row.SALESREPID.ToString()).Trim() + Separator +
//(Row.SITEID_IsNull ? "" : Row.SITEID.ToString()).Trim() + Separator +
(Row.TERMSNETTYPE_IsNull ? "" : Row.TERMSNETTYPE.ToString()).Trim() + Separator +
(Row.TERMSNETDAYS_IsNull ? "" : Row.TERMSNETDAYS.ToString()).Trim() + Separator +
(Row.TERMSNETDATE_IsNull ? "" : Row.TERMSNETDATE.ToString()).Trim() + Separator +
(Row.TERMSDISCTYPE_IsNull ? "" : Row.TERMSDISCTYPE.ToString()).Trim() + Separator +
(Row.TERMSDISCDAYS_IsNull ? "" : Row.TERMSDISCDAYS.ToString()).Trim() + Separator +
(Row.TERMSDISCDATE_IsNull ? "" : Row.TERMSDISCDATE.ToString()).Trim() + Separator +
(Row.TERMSDISCPERCENT_IsNull ? "" : Row.TERMSDISCPERCENT.ToString()).Trim() + Separator +
(Row.TERMSDESCRIPTION_IsNull ? "" : Row.TERMSDESCRIPTION.ToString()).Trim() + Separator +
(Row.FREIGHTTERMS_IsNull ? "" : Row.FREIGHTTERMS.ToString()).Trim() + Separator +
(Row.ORDERDATE_IsNull ? "" : Row.ORDERDATE.ToString()).Trim() + Separator +
(Row.DESIREDSHIPDATE_IsNull ? "" : Row.DESIREDSHIPDATE.ToString()).Trim() + Separator +
(Row.BACKORDER_IsNull ? "" : Row.BACKORDER.ToString()).Trim() + Separator +
(Row.STATUS_IsNull ? "" : Row.STATUS.ToString()).Trim() + Separator +
(Row.SELLRATE_IsNull ? "" : Row.SELLRATE.ToString()).Trim() + Separator +
(Row.BUYRATE_IsNull ? "" : Row.BUYRATE.ToString()).Trim() + Separator +
(Row.LASTSHIPPEDDATE_IsNull ? "" : Row.LASTSHIPPEDDATE.ToString()).Trim() + Separator +
(Row.POSTINGCANDIDATE_IsNull ? "" : Row.POSTINGCANDIDATE.ToString()).Trim() + Separator +
(Row.TOTALAMTORDERED_IsNull ? "" : Row.TOTALAMTORDERED.ToString()).Trim() + Separator +
(Row.TOTALAMTSHIPPED_IsNull ? "" : Row.TOTALAMTSHIPPED.ToString()).Trim() + Separator +
(Row.MARKEDFORPURGE_IsNull ? "" : Row.MARKEDFORPURGE.ToString()).Trim() + Separator +
(Row.EDIFLAG_IsNull ? "" : Row.EDIFLAG.ToString()).Trim() + Separator +
(Row.EXCHRATEFIXED_IsNull ? "" : Row.EXCHRATEFIXED.ToString()).Trim() + Separator +
(Row.PROMISEDATE_IsNull ? "" : Row.PROMISEDATE.ToString()).Trim() + Separator +
(Row.PRINTEDDATE_IsNull ? "" : Row.PRINTEDDATE.ToString()).Trim() + Separator +
(Row.EDIBLANKETFLAG_IsNull ? "" : Row.EDIBLANKETFLAG.ToString()).Trim() + Separator +
//(Row.CURRENCYID_IsNull ? "" : Row.CURRENCYID.ToString()).Trim() + Separator +
//(Row.WAREHOUSEID_IsNull ? "" : Row.WAREHOUSEID.ToString()).Trim() + Separator +
(Row.ACCEPTEARLY_IsNull ? "" : Row.ACCEPTEARLY.ToString()).Trim() + Separator +
(Row.CREATEDATE_IsNull ? "" : Row.CREATEDATE.ToString()).Trim() + Separator +
(Row.CONTACTMOBILE_IsNull ? "" : Row.CONTACTMOBILE.ToString()).Trim() + Separator +
(Row.CONTACTEMAIL_IsNull ? "" : Row.CONTACTEMAIL.ToString()).Trim() + Separator +
(Row.USER3_IsNull ? "" : Row.USER3.ToString()).Trim() + Separator +
(Row.USER6_IsNull ? "" : Row.USER6.ToString()).Trim() + Separator +
(Row.CONSIGNMENT_IsNull ? "" : Row.CONSIGNMENT.ToString()).Trim() + Separator +
(Row.STATUSEFFDATE_IsNull ? "" : Row.STATUSEFFDATE.ToString()).Trim() + Separator +
(Row.PROMISEDELDATE_IsNull ? "" : Row.PROMISEDELDATE.ToString()).Trim() + Separator +
//(Row.TERMSID_IsNull ? "" : Row.TERMSID.ToString()).Trim() + Separator +
(Row.INTERNALORDER_IsNull ? "" : Row.INTERNALORDER.ToString()).Trim()
//(Row.CONTACTID_IsNull ? "" : Row.CONTACTID.ToString()).Trim()
);
HashNoSpace = HashString.Trim();
using (SHA1 shaHash = new SHA1Managed())
{
HashOne = GetShaHash(shaHash, RowData = (Row.ID_IsNull ? "" : Row.ID.ToString()).Trim());
HashTwo = GetShaHash(shaHash, RowData = (Row.CUSTOMERID_IsNull ? "" : Row.CUSTOMERID.ToString()).Trim());
HashThree = GetShaHash(shaHash, RowData = (Row.SALESTAXGROUPID_IsNull ? "" : Row.SALESTAXGROUPID.ToString()).Trim());
HashFour = GetShaHash(shaHash, RowData = (Row.SITEID_IsNull ? "" : Row.SITEID.ToString()).Trim());
HashFive = GetShaHash(shaHash, RowData = (Row.CURRENCYID_IsNull ? "" : Row.CURRENCYID.ToString()).Trim());
HashSix = GetShaHash(shaHash, RowData = (Row.TERMSID_IsNull ? "" : Row.TERMSID.ToString()).Trim());
HashSeven = GetShaHash(shaHash, RowData = (Row.CONTACTID_IsNull ? "" : Row.CONTACTID.ToString()).Trim());
//Row.HashDiffKey = GetShaHash(shaHash, RowData = (Row.CODE_IsNull ? "" : Row.CODE.ToString()) + Separator + (Row.DESCRIPTION_IsNull ? "" : Row.DESCRIPTION.ToString()));
HashDiff = GetShaHash(shaHash, RowData = HashNoSpace.ToUpper());
HashEight = GetShaHash(shaHash, RowData = (Row.ID_IsNull ? "" : Row.ID.ToString()).Trim() + Separator +
(Row.CUSTOMERID_IsNull ? "" : Row.CUSTOMERID.ToString()).Trim()
);
}
Row.CustomerOrderHashKey = HashOne.ToUpper();
Row.CustomerHashKey = HashTwo.ToUpper();
Row.SalesTaxGroupHashKey = HashThree.ToUpper();
Row.SiteHashKey = HashFour.ToUpper();
Row.CurrencyHashKey = HashFive.ToUpper();
Row.TermsHashKey = HashSix.ToUpper();
Row.ContactHashKey = HashDiff.ToUpper();
Row.HashDiff = HashSeven.ToUpper();
Row.CustomerOrderToCustomerHashKey = HashEight.ToUpper();
Row.SEQUENCE = this.seq++;
Row.LOADSOURCE = LoadSourceString.ToString();
}
static string GetShaHash(SHA1 shaHash, string input)
{
// Convert the input string to a byte array and compute the hash.
byte[] data = shaHash.ComputeHash(Encoding.Unicode.GetBytes(input));
// Create a new Stringbuilder to collect the bytes
// and create a string.
StringBuilder sBuilder = new StringBuilder();
// Loop through each byte of the hashed data
// and format each one as a hexadecimal string.
for (int i = 0; i < data.Length; i++)
{
sBuilder.Append(data[i].ToString("x2"));
}
// Return the hexadecimal string.
return sBuilder.ToString();
}