怎样匹配SQL与C#中的数据类型(从XML读取DataSet并更新数据源)
时间:2010-12-29 来源:GIS飞行者
查了很多的资料,确是个难题,没办法只能使用笨方法了~~~~
写了一个函数,
///将C#标准数据类型转换为SQL数据类型
System::String^DataBaseManager::ConvertCsharpToSqlDataType(System::String^ strDataType)
{
System::String^ sqlDataType=strDataType->ToLowerInvariant();
if (sqlDataType=="boolean")
sqlDataType="BIT";
else if (sqlDataType=="string")
{
sqlDataType="varchar";
}
else if (sqlDataType=="int16"||sqlDataType=="int32"||sqlDataType=="int64")
{
sqlDataType="int";
}
else if (sqlDataType=="double")
{
sqlDataType="float";
}
else if (sqlDataType=="single")
{
sqlDataType="real";
}
else if (sqlDataType=="datetime")
{
sqlDataType="DateTime";
}
else if (sqlDataType=="guid")
{
sqlDataType="uniqueidentifier";
}
else if (sqlDataType=="byte"||sqlDataType=="byte[]")
{
sqlDataType="binary";
}
else if (sqlDataType=="decimal")
{
sqlDataType="Decimal";
}
else
sqlDataType="varchar";
return sqlDataType;
}
///复制DataTable表架构,在数据库生成对应的表
System::Data::DataTable^table=(System::Data::DataTable^)Enum->Current;
System::String^tableName=table->TableName;
System::Data::OleDb::OleDbCommand^command=gcnew System::Data::OleDb::OleDbCommand;
command->CommandText="CREATE TABLE "+tableName;
command->Connection=connetion;
command->ExecuteNonQuery();
System::Collections::IEnumerator ^ColumnEnum=table->Columns->GetEnumerator();
int pos=0;
while(ColumnEnum->MoveNext())
{
System::Data::DataColumn ^colum = (System::Data::DataColumn^)ColumnEnum->Current;
//判断该列是不是该表的主键
System::Collections::ArrayList^list=gcnew System::Collections::ArrayList;
System::String ^columType = colum->DataType->Name;
columType=this->ConvertCsharpToSqlDataType(columType);
System::String ^AddColumText = "Alter Table "+tableName+" Add " + colum->ColumnName + " "+columType+ " null";
//VARCHAR(20) null"; //+colum.DataType.Name + " null";
System::Data::OleDb::OleDbCommand^ command1 = gcnew System::Data::OleDb::OleDbCommand(AddColumText,connetion);
command1->ExecuteNonQuery();
if (pos==0)
{
command1->CommandText="Alter Table "+tableName+" Add Constraint p_id Primary key ("+colum->ColumnName+")";
command1->ExecuteNonQuery();
}
pos++;
虽然能够将读取的数据库表复制到保存目录,但是存在将原本的数据类型转换为字符串型的可能性,例如,在数据库中原数据列可能是超链接型数据,那么在复制后的数据列中该列的数据类型却转化为了文本型~~~
无语~~期盼有高人指点一二~~