public SqlCommand AddCommandParameter(string strComSql,string [] paraName,string [] ColName,SqlDbType[] sqltype,bool [] isNull,int[] FieldSize)
 {
    SqlCommand cmm = new SqlCommand();
    cmm.CommandText = strComSql;
    //cmm.Connection = this.conn;
    
    for(int i=0;i<ColName.Length;i++ )
       {
cmm.Parameters.Add(new SqlParameter(paraName[i], sqltype[i],
 FieldSize[i],ParameterDirection.Input, isNull[i], ((System.Byte)(0)),((System.Byte)(0)),ColName[i] , DataRowVersion.Current, null));
}
return cmm;
}

解决方案 »

  1.   

    //自定义事件。
    //根据用户单击的菜单名字,来把相应的表填进ListView中。
    public void Menu_Click(object sender, System.EventArgs e)
    {
    try
    {
    string strSql;
    MenuItem Tmenu=(MenuItem)sender;
    SqlDataReader myreader;
    myDS=new DataSet();
    DataClass CmbData=new DataClass();
     
    //获取单击表的表名。
    strSql="select tableEname from informationtable where tableCname='" + Tmenu.Text.Trim() + "'";
    SqlCommand  sqlcomm= new SqlCommand(strSql,CmbData.SqlConn);
    myreader=sqlcomm.ExecuteReader();
    myreader.Read();
    strTableName=myreader.GetString(0);

    //生成该表的查询语句。
    strSql="select * from " + strTableName;
    myreader.Close();
        
    //set the DataSet
    mySqlDA=new SqlDataAdapter(strSql,CmbData.SqlConn);  
    mySqlDA.Fill(myDS);
                       
    //listview 为该窗体中的对象
    //为listview添加列名
    for(int i=0;i<myDS.Tables[0].Columns.Count;i++) 
    {
    lstAddr.Columns.Add(myDS.Tables[0].Columns[i].ColumnName , 100, HorizontalAlignment.Left);
     
    } //把所有的Lable都设置为相应的列名
    this.labNO.Text=myDS.Tables[0].Columns[0].ColumnName;
    this.LabName.Text=myDS.Tables[0].Columns[1].ColumnName;
    this.labMeno.Text=myDS.Tables[0].Columns[2].ColumnName;
                    
    //设置插入记录格式
                    //设置插入记录的SQL语句。
    string strInsert="INSERT INTO "+ this.strTableName+"("+labNO.Text+"," + LabName.Text+","+this.labMeno.Text
          + ") VALUES (@Tid, @Tname, @Tmeno)";
    //设置command
    string [] strPara={"@Tid","@Tname","@Tmeno"};
    string [] strFieldName={labNO.Text,LabName.Text,labMeno.Text};
    bool [] FieldIsNull=new Boolean[myDS.Tables[0].Columns.Count];
    int [] FieldSize=new Int[3]; 
    //取得Table中,每一列的数据类型。
                    SqlDbType[] sqlType=new SqlDbType[myDS.Tables[0].Columns.Count];
    for(int i=0;i<myDS.Tables[0].Columns.Count;i++)
    {
    sqlType[i]=(SqlDbType)myDS.Tables[0].Columns[i].DataType;  
    FieldIsNull[i]=myDS.Tables[0].Columns[i].AllowDBNull;
    FieldSize[i]=myDS.Tables[0].Columns[i].MaxLength;  
    } mycomm=CmbData.AddCommandParameter(strInsert,strPara,strFieldName,sqlType,FieldIsNull,FieldSize); 
    foreach(DataRow myRow in myDS.Tables[0].Rows)
    {
    //添加进ListView表中
    ListViewItem  lstViewItem=new ListViewItem();
    int i=0;
    foreach(DataColumn myColumn in myDS.Tables[0].Columns)
    {
    MessageBox.Show(myRow[myColumn].ToString() );
    //添加第一项;
    if(i==0)
    {
    lstViewItem.Text=myRow[myColumn].ToString();
    i++;
    }
    else
    lstViewItem.SubItems.Add(myRow[myColumn].ToString());
    }
    lstAddr.Items.Add(lstViewItem);
      
    }
    }  
    catch(Exception myExce)
    {
    MessageBox.Show(myExce.ToString());  
    }
    }
      

  2.   

    static SqlDbType ConvertType(Type t) {
    switch (Type.GetTypeCode(t)) {
    case TypeCode.Boolean:
       return SqlDbType.Bit;
    case TypeCode.Byte:
       return SqlDbType.TinyInt;
    case TypeCode.DateTime:
       return SqlDbType.DateTime;
    case TypeCode.Decimal:
       return SqlDbType.Decimal;
    case TypeCode.Double:
       return SqlDbType.Float;
    case TypeCode.Int16:
       return SqlDbType.SmallInt;
    case TypeCode.Int32:
       return SqlDbType.Int
    case TypeCode.Int64:
       return SqlDbType.BigInt;
    case TypeCode.SByte:
       return SqlDbType.TinyInt; 
    case TypeCode.Single:
       return SqlDbType.Real; 
    case TypeCode.String:
       return SqlDbType.NVarChar;
    case TypeCode.UInt16:
       return SqlDbType.SmallInt; 
    case TypeCode.UInt32:
       return SqlDbType.Int; 
    case TypeCode.UInt64:
       return SqlDbType.BigInt;
    case TypeCode.Object:
       return SqlDbType.Variant;
    }
    }
      

  3.   

    case TypeCode.Object:
       return SqlDbType.Variant;改一下:
    default:
       if (t == typeof(byte[])) {
          return SqlDbType.Binary;
       }   
      return SqlDbType.Variant;