我正在编写一个从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"];
}
这会有效还是有更好的方法呢?
答案 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建立了连接,因此需要担心。