我建立一個內存中數據字典這些類的對象轉換字符串值SqlDbType
public class DDRow
{
public string ColumnName { get; set; }
public SqlDBType DataType { get; set; }
public int ColumnSize { get; set; }
public bool IsIdentity { get; set; }
public bool AllowDBNull { get; set; }
}
...在一個子程序,從SqlReader.GetSchema通話填充它
//Retrieve column schema into a DataTable.
schemaTable = myReader.GetSchemaTable();
DDRow wrkRow = null;
//For each field in the table...
foreach (DataRow myField in schemaTable.Rows)
{
wrkRow = new DDRow();
wrkRow.ColumnName = Convert.ToString(myField["ColumnName"]); // string
wrkRow.DataType = myField["DataType"]; //SqlDbType
...這一切似乎除了我的工作無法弄清楚如何
myField["DataType"]
這是一個對象,轉換成SqlDBT YPE值投入DDRow.DataType
我可以把它轉換成字符串:
string s1 = Convert.ToString(myField["DataType"]);
但
SqlParameter p = new SqlParameter(s1, o);
SqlDbType q = p.SqlDbType; // <-- error here.
拋出一個錯誤如上所述,因此字符串是不夠的。
我知道我可以通過轉換表例程運行字符串值來生成SqlDbType值;有沒有更短的路?
編輯------- - 根據adam的回答,這是對它進行編碼的正確方法,並且是測試產生正確結果的正確方法(將DataType替換爲DDRow中的ProviderType 定義)
wrkRow.ProviderType = (SqlDbType)(int)myField["ProviderType"];
SqlParameter wrkS = new SqlParameter("@ABC",wrkRow.ProviderType,8);
SqlDbType wrkT = wrkS.SqlDbType;
謝謝,這是有效的。當我建立問題時,SqlDBType是一個錯字。不確定你的錯誤方式是什麼意思,因爲DDRow的正確結果似乎產生了。 – wayfarer
太棒了。在您的文章中,您似乎將s1作爲第一個參數傳遞 - 如果我沒有弄錯,那是數據類型的名稱,但它應該是參數名稱。我已經編輯了我的答案,以包含「@」符號,因爲我忘了將它放在那裏。無論哪種方式,你現在在做什麼看起來很好。 –