DataTable dtcol = new DataTable();
string strdttype = cmbDttype.SelectedItem.ToString();
dtcol.TableName = txtDtname.Text;
dtxsd.Columns.Add(txtCname.Text, typeof(strdttype));
dtcol.WriteXmlSchema("@D:\Example\exampledt.xsd");
我正在编写上面的代码来填充数据表中的列,这里我从txtCname获取列名,我从Combobox cmbDttype
中选择该列的数据类型。
dtxsd.Columns.Add(txtCname.Text, typeof(strdttype)); //In this line I am getting error strdttype is a field but used is used like a type.
txtDtname
带有该数据表的表名
从最后一行开始,它将Schema写入exampledt,但缺少xsd文件中的现有数据表,并显示新创建的数据表。
答案 0 :(得分:5)
您应该向typeof operator提供类型名称(而不是变量名称)。您的strdttype
包含字符串类型,因此正确的代码为:
dtxsd.Columns.Add(txtCname.Text, typeof(string));
另一种选择 - 获取变量类型:
dtxsd.Columns.Add(txtCname.Text, strdttype.GetType());
答案 1 :(得分:1)
这里使用typeof是错误的。您需要在此处提供ClassName而不是对象。要获得对象类型,请尝试第二行。
typeof(ClassName);
someVariable.GetType();
答案 2 :(得分:0)
我在您的代码中发现了两个不同的错误。一个是非常明显的,但其他是有条件的。
您在变量而不是类型上使用typeof运算符。类型 operator提供了底层数据类型的类型,所以正确 用法是
var t = typeof(string);
或
var tt = typeof(int);
如果你想获得变量的类型,那么你应该使用GetType() 方法如下:
dtxsd.Columns.Add(txtCname.Text, strdttype.GetType());
我认为您有一个用于选择数据类型的组合框,根据选择,您的列类型将被确定。如果是这样,那么即使您使用GetType方法,它也将始终返回字符串,因为您的变量strdttype是字符串类型。我认为在这种情况下你应该使用以下声明
dtxsd.Columns.Add(txtCname.Text, Type.GetType(strdttype));
组合框中的值应采用以下格式: “System.Int32”,“System.String”,“System.Int64”,. 。 。等等。
此致
Nitin Joshi