我在Visual Studio中使用DataSet和DataTables相对比较新,我目前正在尝试填充DataTable以查询SQL Insert语句。我现在正在使用的是这个。
string query = "USE [Database] SELECT e.ID, e.FieldTypeDesc, e.FieldTypeNum, e.tblFieldRefID, f.TableName, f.RefColumn, f.ColumnName FROM tblEnum e JOIN tblFieldRef f ON e.tblFieldRefID = f.ID;";
string field0; //field0 - field12 declared
SqlConnection conn = new SqlConnection();
conn.ConnectionString = ConfigurationManager.ConnectionStrings["DatabaseConnectionString"].ConnectionString;
conn.Open();
SqlCommand cmd = new SqlCommand(query, conn);
MRWPDataSet1 dsMRWP = new MRWPDataSet1();
SqlCommand cmdMRWP = new SqlCommand(query, conn);
SqlDataAdapter daMRWP = new SqlDataAdapter();
daMRWP.SelectCommand = cmdMRWP;
daMRWP.Fill(dsMRWP);
这一切似乎都按计划运作。当我到达这一部分时,虽然......
foreach (DataRow drMRWP in dsMRWP.Tables[0].Rows)
{
field0 = drMRWP["Field0"].ToString();
field1 = drMRWP["Field1"].ToString(); //for field0 - field12
string update = "INSERT INTO [dbo].[Table] ([Code], [Description], [SendEmail], [Type], [CustomForeColor], [Inactive], [ModifiedDate], [CreatedDate], [ModifiedById], [CreatedById], [StartDate], [EndDate]) VALUES (field1, field2, field3, field4, field5, field5, field6, field7, field8, field9, field10, field11, field12)";
SqlCommand upd = new SqlCommand(update, conn);
}
它被完全跳过,显然没有值存储在drMRWP中。它甚至没有进入调试阶段,只是跨过了。
我是所有这一切的新手,所以很有可能我忽略了某些事情或者在某个地方犯了一个错误,但是如果我能看到它可能是什么就该死的。任何有关这方面的见解,或者简化可能过于复杂的内容的建议,都会非常感激。
答案 0 :(得分:1)
由于您使用强类型DataSet
,我认为它包含多个表。因此,要么使用“普通”DataSet
并继续使用Tables[0]
,要么使用正确的表格,这是一种源自DataTable
的自动生成类型。
例如(假设表格的自动生成类型为tblEnum
):
foreach (DataRow drMRWP in dsMRWP.tblEnum)
{
// ...
}
如果您将DataRows
中的DataRow
投放到foreach
,它还会强烈输入DataRow
这些其他属性。因此,将tblEnumRow
替换为{{1}}(名称来自表名)。