[英]How to retrieve 0 as the first number in C#
設想:
我有一個記錄為 001234 的數據庫,我用cmd.executescaler();
調用它cmd.executescaler();
成一個int
變量。 問題是當我從該變量中檢索保存的數據 ( 001234
) 數據時,它只給出1234
。 001234
中的00
很重要,這是第一次出現在 db 中的問題,其中 sql 省略了第一個零,然后我將數據類型更改為 nvarchar 有效,我如何才能准確地檢索表單上的數據001234
。
注意:我不能將數據轉換為字符串,因為我還必須對它們進行一些計算。
使用 Sql Server Visual Studio 2010 c#
希望它清楚而不是模糊。 如果您需要更多信息,請告訴我。 提前致謝。
數字數據類型沒有也不能有前導零。 因此,具有前導零的唯一方法是將值存儲為字符串。
但是,這只是格式化顯示給用戶的輸出的問題。 您可以將數據庫值讀入一個int
變量,進行計算並在顯示值時,您可以執行以下操作:
string displayValue = String.Format("{0:D6}", intValue);
並顯示displayValue
的值。
如果你想在代碼方面工作:
string displayValue = String.Format("{0:D6}", intValue);
如果你想在數據庫端工作,你需要一個允許編寫這種查詢的Pad 函數:
SELECT dbo.PadString ('8', '0', 5)
->Result: 00008
SELECT dbo.PadString ('abc', '*', 12)
->Result: *********abc
SELECT dbo.PadString ('abc', '0', 7)
->Result: 0000abc
在 T-SQL 中創建函數
CREATE FUNCTION [dbo].[PadString]
(@Seq varchar(16),
@PadWith char(1),
@PadLength int
)
RETURNS varchar(16) AS
BEGIN
declare @curSeq varchar(16)
SELECT @curSeq = ISNULL(REPLICATE(@PadWith, @PadLength - len(ISNULL(@Seq ,0))), '') + @Seq
RETURN @curSeq
END
SQL 這樣做的原因是因為 001234 = 1234 是任何數字格式,無論它是什么類型。 作為“骯臟”的解決方案,您可以將其轉換為一個 int 值,這將為您提供 1234,執行您的計算,然后將您的答案轉換回添加前導零的字符串。
int myValue = Int32.Parse("001234");
int myAnswer = myValue * 2;
string myAnswerString = "00" + myAnswer.ToString();
最好的方法是按照@Thorsten Dittmar 的建議格式化字符串。 如果可能,開始時不要將數字值作為 varchar 存儲在數據庫中,但是我知道這有時是必需的,但是我看不到對這些值進行計算的意義。
如果那些前導零具有某種意義並且不能被遺漏,則可以進行轉換:
int number = 0;
string strNumber = (string)cmd.ExecuteScalar();
if(int.TryParse(strNumber, out number))
{
// process number
// if you want some output to be formatted with leading
// zeros you can use PadLeft method
int totalNumberOfDigits = 6;
string strResult = number.ToString().PadLeft(totalNumberOfDigits, '0');
}
您可以在檢索您的號碼后在 c# 中使用 string.PadLeft(),因為您有固定長度的號碼
來自msdn的例子,
string str = "forty-two";
char pad = '.';
Console.WriteLine(str.PadLeft(15, pad)); // Displays "......forty-two".
Console.WriteLine(str.PadLeft(2, pad)); // Displays "forty-two".
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.