私は私がbuffeledしまった奇妙なエラーました:私は、関数..uhmを持っている を...このような何か:System.Int64をlongに変換するとエラーが発生しますか?
void someFunctionTakingALong(long ID)
{
var table = new DataTable();
table .Columns.Add(new DataColumn("RID", Type.GetType("System.Int64")));
table.Rows.Add(ID); //<-- throws err
}
は、このエラーがスローされます。
System.ArgumentException: Input string was not in a correct format.Couldn't store in RID Column. Expected type is Int64. ---> System.FormatException: Input string was not in a correct format.
at System.Number.StringToNumber(String str, NumberStyles options, NumberBuffer& number, NumberFormatInfo info, Boolean parseDecimal)
at System.Number.ParseInt64(String value, NumberStyles options, NumberFormatInfo numfmt)
at System.String.System.IConvertible.ToInt64(IFormatProvider provider)
at System.Data.Common.Int64Storage.Set(Int32 record, Object value)
at System.Data.DataColumn.set_Item(Int32 record, Object value)
--- End of inner exception stack trace ---
これは生産に起こり、私はIDのどの値が実際に関数に渡されているかを見るためのログを持っていません...しかし、そうであっても...パラメータが長いと、IDが長く...正しいことを保証する必要がありますか?では、なぜこれが投げ込まれているのですか? IDがint64に変換できない値は何ですか?
編集:ここでは
が実際のソースです:Trhowing列がPropValueID
public void AddRule(int PropID, long PropValueID, int type, string Data)
{
if (!m_HasRule)
{
m_Rules = new DataTable();
m_Rules.Columns.Add(new DataColumn("RID", Type.GetType("System.Int32")));
m_Rules.Columns.Add(new DataColumn("PropID", Type.GetType("System.Int32")));
m_Rules.Columns.Add(new DataColumn("PropValueID", Type.GetType("System.Int64")));
//m_Rules.Columns.Add(new DataColumn("PropValue", Type.GetType("System.String")));
m_Rules.Columns.Add(new DataColumn("Type", Type.GetType("System.Int32")));
m_Rules.Columns.Add(new DataColumn("Data", Type.GetType("System.String")));
m_HasRule = true;
}
ToStringSB = null;
if (type<2) // a "Is/Not specified property"
{
if (string.IsNullOrEmpty(Data)) //is specified (0,1)
m_Rules.Rows.Add(m_RID, PropID, 0, type, ""); //<<-- here we pass 0 (int32) instead of long.. could this be it? Stack says this is not the line throwing
else //is equal to/is not equal to(2,3)
m_Rules.Rows.Add(m_RID, PropID, PropValueID,3-type, Data);
}else
if ((type > 3) && (type < 6)) // a "like/not like" rule
{
// "Like" or "not like" DATA .. no value ID is provided
m_Rules.Rows.Add(m_RID, PropID, PropValueID, type, Data); //<<-- Stack says it throws here
}
else // a greater/lesser rule
{
m_Rules.Rows.Add(m_RID, PropID, PropValueID, type, Data);
}
}
であり、我々は0リテラルを渡す疑わしいライン(int)があるが、それはありませんスタックがスローすると言う行番号。
私は常に自分のコードをテストするとは限りません。しかし私がそうするとき、私は生産でそれをします。 –
注: 'Type.GetType(" System.Int64 ")'を使用する代わりに、 'typeof(long)'または 'typeof(System.Int64)'を使用してください。 –
'入力文字列は正しいフォーマットではありませんでした。'何かが文字列を期待していることを伝えますが、実際には 'object'か' System.Int64'のプロンプトが表示されます。 – Zasz