switch(this.lstRight.Items[i].ToString()) { case "有税表": strTableName="tdz00003"; break; case "无税表": strTableName="tdz00004"; break; case "企业所得税表": strTableName="TDZ00005"; break; case "损益表": strTableName="TDZ00006"; break; case "利润分配表": strTableName="TDZ00007"; break; case "补充资料表": strTableName="TDZ00008"; break; case "资产负债表": strTableName="TDZ00009"; break; case "个人独资和合伙投资各所税表": strTableName="TDZ00010"; break; case "土地增值税表": strTableName="TDZ00011"; break; case "扣缴个人所得税表(一)": strTableName="TDZ00012"; break; case "扣缴个人所得税表(二)": strTableName="TDZ00013"; break; case "扣缴个人所得税表(三)": strTableName="TDZ00014"; break; case "纳税申报表房产税附列资料": strTableName="TDZ00015"; break; case "纳税申报表土地税附列资料": strTableName="TDZ00016"; break; case "纳税申报表印花税附列资料": strTableName="TDZ00017"; break; case "纳税申报表营业税附列资料": strTableName="TDZ00018"; break; case "纳税申报表土地增值税附列资料": strTableName="TDZ00019"; break; case "纳税申报表印花税票领用存情况": strTableName="TDZ00020"; break; case "外籍营业税申报表": strTableName="TDZ00021W"; break; case "外籍个人所得税月份申报表": strTableName="TDZ00022W"; break; case "外籍扣缴个人所得税报告表": strTableName="TDZ00023W"; break; }//end switch if(ReadWriteData(strTableName,sourceTable,deTable)==false) { return false; }//end if
你可以不用编程序的,用数据库自带工具,从一个数据库导出,再用另一个
数据库导入。我常在sql,Access中导。
------------------------
我也是,
(循环)1:从一个配置文件中读入表的名称
2:从源库中读出表的结构DataSet.Tables.Columns里面有所有的你想知道的信息,什么改列的数据类型,大小,等等
3:对这个表的每一行生成一个Insert语句,如果是字符型的和日期型的要适当的调整格式(加’号);
4:连接到目标库执行上面产生的sql语句
循环直到表处理完毕
强烈建议,自己动手写一下,明天一个上午绝对来得及,写一遍之后,你就会对DataSet之类的东西理解的深一些:)
5个月前我刚工作的时候,老板就给我做这个,和你这个一摸一样几乎,呵呵,当时我都不怎么会编程序,晕死
不过很简单的
GOOD LUCK
不过对于数据量巨大的情况下我不看好哦。:D
客户要求用程序实现,我还没没明白brightheroes的意思,你的意思不就是说把20个表用insert语句吗???
能不能找个简单点的代码看看啊,比如就一个表的操作
select * from table1 ,填充到dataset中然后
string strSqlHead = "insert into table1(";
foreach(DataColumn c in ds.Tables["table1"].DataColumns)
{
strSql += c.ColunsName(什么属性我忘了,就是列名);
}
strSqlHead += ")value(";
这样,就生成了一个表头
然后呢,对每一行生成一个sql语句
ArrayList arrayList = new ArrayList();
string insertStr = strSql ;
int i = 0;
froeach(DataRow dr in ds.Tables["table1"].Rows)
{
foreach(DataColumns c in dr.Columns)
if(ds.Tables["table1"].Columns[i].DataType = "System.string")
{
//如果是字符串,就要加上单引号,日期也一样
insertStr += "'" + dr[i].ToString() + "'";
}
else
{
insertStr += dr[i].ToString() ;
}
}
arrayList.Add(insertStr);这样,当你的循环结束之后,你的ArrayList里面就有了对应于这个表的insert语句
你就连接到目标库,执行这个arrayList里面的sql语句就可以了
当然,这肯定能实现你的目的
至于说更好的办法一定有,可惜我不知道:(你就自己看着写一下,很easy的
{
int i = 0 放到这里,就是纪录这一行有多少列
foreach(DataColumns c in dr.Columns)
if(ds.Tables["table1"].Columns[i].DataType = "System.string")
{
//如果是字符串,就要加上单引号,日期也一样
insertStr += "'" + dr[i].ToString() + "'";
}
else
{
insertStr += dr[i].ToString() ;
}
}
我们现在做的这个项目就是用这个方法自动生成的Sql语句
我的MSN是[email protected]
有问题联系我
你要是想看,占到vs.net中看,要不不好看
/********************************************
* 过程名:DataTrance
* 功能 :实现接口机与外网的数据传送
******************************************
*/
private bool DateTrance()
{
try
{
strBeginDate=this.txtStartTime.Text.ToString();
strEndDate=this.txtEndTime.Text.ToString(); DataSet ds=new DataSet();
for(int i=0;i<this.lstRight.Items.Count;i++)
{
string sourceTable="strSourceTable"+i;
string deTable="strDeTable"+i;
DataTable dtSource=new DataTable(sourceTable);
DataTable dtDe=new DataTable(deTable);
switch(this.lstRight.Items[i].ToString())
{
case "有税表":
strTableName="tdz00003";
break;
case "无税表":
strTableName="tdz00004";
break;
case "企业所得税表":
strTableName="TDZ00005";
break;
case "损益表":
strTableName="TDZ00006";
break;
case "利润分配表":
strTableName="TDZ00007";
break;
case "补充资料表":
strTableName="TDZ00008";
break;
case "资产负债表":
strTableName="TDZ00009";
break;
case "个人独资和合伙投资各所税表":
strTableName="TDZ00010";
break;
case "土地增值税表":
strTableName="TDZ00011";
break;
case "扣缴个人所得税表(一)":
strTableName="TDZ00012";
break;
case "扣缴个人所得税表(二)":
strTableName="TDZ00013";
break;
case "扣缴个人所得税表(三)":
strTableName="TDZ00014";
break;
case "纳税申报表房产税附列资料":
strTableName="TDZ00015";
break;
case "纳税申报表土地税附列资料":
strTableName="TDZ00016";
break;
case "纳税申报表印花税附列资料":
strTableName="TDZ00017";
break;
case "纳税申报表营业税附列资料":
strTableName="TDZ00018";
break;
case "纳税申报表土地增值税附列资料":
strTableName="TDZ00019";
break;
case "纳税申报表印花税票领用存情况":
strTableName="TDZ00020";
break;
case "外籍营业税申报表":
strTableName="TDZ00021W";
break;
case "外籍个人所得税月份申报表":
strTableName="TDZ00022W";
break;
case "外籍扣缴个人所得税报告表":
strTableName="TDZ00023W";
break;
}//end switch if(ReadWriteData(strTableName,sourceTable,deTable)==false)
{
return false;
}//end if
}//end for
ds.Clear();
Ado.adoClass.F_ConnClose(Ado.adoClass.objConnection1);
return true;
}
catch(System.Exception err)
{
MessageBox.Show(err.Message);
return false;
}
}
* 过程名:getColumnsContentsByTable
* 功能 :返回表中的字段属性
******************************************
*/
private SqlDataReader getColumnsContentsByTable(string strTemp,SqlConnection objConn)
{
StringBuilder sbSQL = new StringBuilder(); //SQL语句
try
{
sbSQL.Append("select ");
sbSQL.Append("b.name,"); //列名或过程参数的名称
sbSQL.Append("c.name "); //数据类型名称
sbSQL.Append("as ");
sbSQL.Append("typeName,"); //别名
sbSQL.Append("case ");
sbSQL.Append("when ");
sbSQL.Append("b.xtype=231 "); //systypes 中的物理存储类型
sbSQL.Append("then ");
sbSQL.Append("b.length/2 "); //(length)systypes 中的最大物理存储长度
sbSQL.Append("else ");
sbSQL.Append("b.length "); //systypes 中的最大物理存储长度
sbSQL.Append("end ");
sbSQL.Append("length "); //别名
sbSQL.Append("from ");
sbSQL.Append("sysobjects a "); //创建的每个对象(约束、默认值、日志、规则、存储过程等)在表中占一行
sbSQL.Append("join ");
sbSQL.Append("syscolumns b "); //每个表和视图中的每列在表中占一行,存储过程中的每个参数在表中也占一行
sbSQL.Append("on ");
sbSQL.Append("a.id= "); //对象标识号。
sbSQL.Append("b.id "); //该列所属的表对象 ID,或与该参数关联的存储过程 ID。
sbSQL.Append("join "); //JOIN
sbSQL.Append("systypes c "); //每种系统提供数据类型和用户定义数据类型,均包含一行信息
sbSQL.Append("on ");
sbSQL.Append("b.xusertype= "); //扩展的用户定义数据类型 ID。
sbSQL.Append("c.xusertype "); //扩展用户类型
sbSQL.Append("where ");
sbSQL.Append("b.autoval "); //仅限内部使用(varbinary(255))
sbSQL.Append("is null ");
sbSQL.Append("and ");
sbSQL.Append("a.name='"); //对象名。
sbSQL.Append(strTemp); //表名
sbSQL.Append("'"); SqlCommand myCommand = new SqlCommand(sbSQL.ToString(),objConn);
SqlDataReader objReader = myCommand.ExecuteReader();
sbSQL.Remove(0,sbSQL.Length);
return objReader;
}
catch(System.Exception exp)
{
MessageBox.Show(exp.Message);
return null;
}
}
* 过程名:ReadWriteData
* 功能 :读数据,并写入另一数据库
******************************************
*/
public bool ReadWriteData(string strTableName,string sourceTable,string deTable)
{
string strSQLtemp="";
string strSQLtemp2="";
string strSQLtemp3="";
SqlCommand CommandInsert = new SqlCommand();
SqlCommand CommandUpdate = new SqlCommand();
try
{
//open Connection
Ado.adoClass.F_ConnOpen(Ado.adoClass.objConnection1); //Create SqlDataReder
SqlDataReader myReader=getColumnsContentsByTable(strTableName,Ado.adoClass.objConnection1);
while (myReader.Read())
{
string strTemp=myReader.GetString(0);
if (strTemp==QUERYDATE)
continue;
strSQLtemp = strSQLtemp + strTemp + ","; //字段名(select)
strSQLtemp2 = strSQLtemp2 + "@" + strTemp + ","; //字段值(insert)
strSQLtemp3 = strSQLtemp3 + strTemp +" = @" + strTemp + ","; //字段=值(update)
switch( myReader.GetString(1))
{
case CHAR:
CommandInsert.Parameters.Add("@" + strTemp,System.Data.SqlDbType.Char,myReader.GetInt32(2),strTemp);
CommandUpdate.Parameters.Add("@" + strTemp,System.Data.SqlDbType.Char,myReader.GetInt32(2),strTemp);
break;
case DATETIME:
CommandInsert.Parameters.Add("@" + strTemp,System.Data.SqlDbType.DateTime,myReader.GetInt32(2),strTemp);
CommandUpdate.Parameters.Add("@" + strTemp,System.Data.SqlDbType.DateTime,myReader.GetInt32(2),strTemp);
break;
case DECIMAL:
CommandInsert.Parameters.Add("@" + strTemp,System.Data.SqlDbType.Decimal,myReader.GetInt32(2),strTemp);
CommandUpdate.Parameters.Add("@" + strTemp,System.Data.SqlDbType.Decimal,myReader.GetInt32(2),strTemp);
break;
case INT:
CommandInsert.Parameters.Add("@" + strTemp,System.Data.SqlDbType.Int,myReader.GetInt32(2),strTemp);
CommandUpdate.Parameters.Add("@" + strTemp,System.Data.SqlDbType.Int,myReader.GetInt32(2),strTemp);
break;
case NVARCHAR:
CommandInsert.Parameters.Add("@" + strTemp,System.Data.SqlDbType.NVarChar,myReader.GetInt32(2),strTemp);
CommandUpdate.Parameters.Add("@" + strTemp,System.Data.SqlDbType.NVarChar,myReader.GetInt32(2),strTemp);
break;
case VARCHAR:
CommandInsert.Parameters.Add("@" + strTemp,System.Data.SqlDbType.VarChar,myReader.GetInt32(2),strTemp);
CommandUpdate.Parameters.Add("@" + strTemp,System.Data.SqlDbType.VarChar,myReader.GetInt32(2),strTemp);
break;
case NUMERIC:
CommandInsert.Parameters.Add("@" + strTemp,System.Data.SqlDbType.Decimal,myReader.GetInt32(2),strTemp);
CommandUpdate.Parameters.Add("@" + strTemp,System.Data.SqlDbType.Decimal,myReader.GetInt32(2),strTemp);
break;
case BIT:
CommandInsert.Parameters.Add("@" + strTemp,System.Data.SqlDbType.Bit,myReader.GetInt32(2),strTemp);
CommandUpdate.Parameters.Add("@" + strTemp,System.Data.SqlDbType.Bit,myReader.GetInt32(2),strTemp);
break;
default:
CommandInsert.Parameters.Add("@" + strTemp,System.Data.SqlDbType.Variant,myReader.GetInt32(2),strTemp);
CommandUpdate.Parameters.Add("@" + strTemp,System.Data.SqlDbType.Variant,myReader.GetInt32(2),strTemp);
break;
}//end switch
}//end while myReader.Close(); strSQLtemp=strSQLtemp.Substring(0,strSQLtemp.Length -1);
strSQLtemp2=strSQLtemp2.Substring(0,strSQLtemp2.Length -1);
strSQLtemp3=strSQLtemp3.Substring(0,strSQLtemp3.Length -1);
strSelect="select " + strSQLtemp + " from " + strTableName + " where " + QUERYDATE +" >= ";
strSelect= strSelect + "convert(datetime,'" + strBeginDate + " 00:00:00.000') and ";
strSelect= strSelect + QUERYDATE +" <= convert(datetime,'" + strEndDate + " 23:59:59.999')"; strSelectDe="select " + strSQLtemp + " from " + strTableName;
strInsert="insert into " + strTableName +"(" + strSQLtemp +") values (" +strSQLtemp2 + ")";
strUpdate="update " + strTableName + " set " + strSQLtemp3 + " where 1=1";
DataSet ds;
ds=Ado.adoClass.GetMyDataSetFillSchema(Ado.adoClass.objConnection,strSelect,sourceTable); int intTest=ds.Tables[sourceTable].PrimaryKey.Length;
for(int i=0;i<ds.Tables[sourceTable].PrimaryKey.Length;i++)
{
strUpdate = strUpdate + " and " + ds.Tables[sourceTable].PrimaryKey[i] + " = @" ;
strUpdate = strUpdate + ds.Tables[sourceTable].PrimaryKey[i];
}
// strUpdate=strUpdate+" and sz=@sz and nsrbh=@nsrbh and sbrq=@sbrq and sm=@sm and kuan=@kuan and xiang=@xiang and jc=@jc and dkbz=@dkbz and qxlx=@qxlx";// 写数据
SqlDataAdapter adp=new SqlDataAdapter();
adp.SelectCommand = new SqlCommand(strSelectDe,Ado.adoClass.objConnection1);
CommandInsert.Connection=Ado.adoClass.objConnection1;
CommandInsert.CommandText=strInsert;
adp.InsertCommand=CommandInsert;
CommandUpdate.Connection=Ado.adoClass.objConnection1;
CommandUpdate.CommandText=strUpdate;
adp.UpdateCommand=CommandUpdate;
adp.TableMappings.Add("table1", sourceTable);
adp.TableMappings.Add("table", deTable);
adp.FillSchema(ds,SchemaType.Source,deTable);
adp.Fill(ds,deTable);
for(int i=0;i<ds.Tables[sourceTable].Rows.Count;i++)
{
ds.Tables[deTable].BeginLoadData();
ds.Tables[deTable].LoadDataRow( ds.Tables[sourceTable].Rows[i].ItemArray ,false);
ds.Tables[deTable].EndLoadData();
}
adp.Update(ds,deTable);
ds.Clear();
adp=null;
CommandInsert=null;
CommandUpdate=null;
return true;
}
catch(System.Exception err)
{
MessageBox.Show(err.Message);
return false;
}
}
public static DataSet GetMyDataSetFillSchema(SqlConnection objConn,string strSQL,string strTable)
{
SqlDataAdapter objAdapter = new SqlDataAdapter(strSQL,objConn);
DataSet ds = new DataSet();
try
{
if(objConn.State!=System.Data.ConnectionState.Open)
{
objConn.Open();
}
objAdapter.Fill(ds,strTable);
objAdapter.FillSchema(ds,SchemaType.Source,strTable);
return ds;
}
catch(System.Exception exp)
{
throw new Exception(exp.Message);
}
}
已经还要跟你学习^_^