在MySQL中使用.NET SqlTypes

时间:2012-01-09 20:38:20

标签: c# mysql sql-server sqldatatypes

我正在编写一个从MySQL数据库读取并将数据迁移到SQL Server数据库的应用程序。我选择在C#中编写它,因为它内置了SQL结构和功能。我想知道,是否可以在我的类中使用System.Data.SqlTypes。*结构来读取MySql中的数据?

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

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

这会有效还是有更好的方法呢?

2 个答案:

答案 0 :(得分:2)

如果您知道MySqlDbType,那么简单地对.Net类型执行Explicit conversion可能是最佳做法,然后在将数据插入SqlServer时使用正确的SqlDbType。这消除了转换,空引用等任何问题。

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

答案 1 :(得分: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建立了连接,因此需要担心。