2012-01-09 36 views
1

我在寫一個從MySQL數據庫中讀取數據並將數據遷移到SQL Server數據庫的應用程序。我選擇用C#編寫它,因爲它內置了SQL結構和功能。我想知道,是否可以在我的類中使用System.Data.SqlTypes。*結構,將MySql中的數據讀入?在MySQL中使用.NET SqlTypes

即。

// Pseudo code 
IDataReader reader = /* { return DB reader } */; 

while (reader.Read()) 
{ 
    SqlString str = (SqlString) reader["someVarCharField"]; 
    SqlBoolean b = (SqlBoolean) reader["someTinyIntField"]; 
} 

這項工作還是有更好的方法嗎?

+0

幾年前,我做了一件非常相似的事情,從我記得我剛剛使用的內置類型中也可以看出。不需要特定於Sql的類型。 – user1231231412 2012-01-09 20:41:00

+0

唯一的問題是將TinyINT轉換爲布爾值(內置),因爲沒有從「1」字符串轉換爲true。我想知道是否有更簡單的方法來做到這一點。 – MarkP 2012-01-09 20:42:22

+0

我確實使用了.net類型,比如string,long,boolean等。在我的例子中,對於布爾值,我在vb.net中使用了Ctype。 => Ctype(「1」,布爾值) – Jaxedin 2012-01-09 20:45:22

回答

2

如果你知道MySqlDbType這是最好的做法,簡單地做一個.net類型的Explicit conversion然後使用正確的SqlDbType插入數據到SqlServer。這消除了任何問題,具有鑄造,空引用等

string myStringField = reader["someVarCharField"].ToString(); 
bool myBoolField = reader.GetBoolean("booleanField"); 
etc.... 
1

我在想什麼,如果你只是不喜歡的東西,psudeo代碼

SQL類裏面...

while(reader.Read()) 
{ 
    int id = int.Parse(reader[0].ToString()); 
    string name = reader[1]; 
    bool active = false; 
    if(int.Parse(reader[2].ToString()) == 1) 
     active = true; 

    SqlServerDBInsert(id, name, active); 
} 

.. 。插入

SQLServerDBInsert(int id, string name, bool active) 
{ 

    string query = "INSERT INTO MyTable(ID, Name, Active) VALUES(@id, @name, @active)"; 
    using(SqlCommand cmd = new SqlCommand(query, conn)) 
    { 
    SqlParamter param = new SqlParameter(); 
    param.ParameterName = "@id"; 
    param.Value = id; 
    param.SqlDbType = SqlDbType.Int; 
    cmd.Parameters.Add(param); 
    .... 
    } 
} 

我不確定是否有相同的連接在MySQL和SQLServer上打開所以有這樣的擔心。