正在获取“此行已属于另一个表,并且输入数组的长度大于此表中的列数。”

问题描述 投票:0回答:1

如果使用finalTable.Rows.Add(row.ItemArray),则会出现此错误"Input array is longer than the number of columns in this table."

con.Open();
cmd.Connection = con;
cmd.CommandText = "SELECT CustomerName FROM Customers";
SqlDataAdapter adp = new SqlDataAdapter(cmd);
DataSet ds = new DataSet();
adp.Fill(ds);
DataTable finalTable = new DataTable();
//finalTable.TableName = "Customers";
if (ds.Tables.Count > 0)
{
    int i = 1;
    DataTable firstTable = ds.Tables[0];
    //firstTable.TableName = "Customers";
    foreach (DataRow row in firstTable.Rows)
    {
        if (i == 5)
        {
            firstTable.NewRow();
            i = 0;
        }
        finalTable.Rows.Add(row.ItemArray);
        i++;
    }
}

Repeater1.DataSource = finalTable;
Repeater1.DataBind();
con.Close();

并且如果我使用此finalTable.Rows.Add(row),它会给我"This row already belongs to another table".

    con.Open();
    cmd.Connection = con;
    cmd.CommandText = "SELECT CustomerName FROM Customers";
    SqlDataAdapter adp = new SqlDataAdapter(cmd);
    DataSet ds = new DataSet();
    adp.Fill(ds);
    DataTable finalTable = new DataTable();
    //finalTable.TableName = "Customers";
    if (ds.Tables.Count > 0)
    {
        int i = 1;
        DataTable firstTable = ds.Tables[0];
        //firstTable.TableName = "Customers";
        foreach (DataRow row in firstTable.Rows)
        {
            if (i == 5)
            {
                firstTable.NewRow();
                i = 0;
            }
            finalTable.Rows.Add(row);
            i++;
        }
    }

    Repeater1.DataSource = finalTable;
    Repeater1.DataBind();
    con.Close();
}                

不知道如何解决,请问有解决办法吗?

c# asp.net repeater
1个回答
0
投票

下面是一种方法,允许您通过TSQL从数据库中选择数据(从table1 ...中选择*),然后作为数据表返回并继续处理(例如,绑定表)

这是方法

1)建立了一个连接字符串,如果您要开发Web应用程序,请转到下面的web.config文件添加,根据您的SQL环境设置更改参数。

<configuration>
<connectionStrings>  
        <add name="PSDatabaseConnectionString" connectionString="Data Source=YourSQLserverName\SQLEXPRESS;Initial Catalog=YourDatabaseName;Integrated Security=True" providerName="System.Data.SqlClient"/>
</connectionStrings>

....

2)然后构建一个方法来接受SQL语句并以数据表的形式返回多行数据

    public static DataTable RunSQL_DML_FillDataGrid(string TSQL)
{
    string connectionString = ConfigurationManager.ConnectionStrings["PSDatabaseConnectionString"].ConnectionString;

    SqlDataAdapter dataAdapter;
    SqlConnection conn = new SqlConnection(connectionString);


    try
    {
        // Run TSQL on SQL server
        dataAdapter = new SqlDataAdapter(TSQL, connectionString);

        // MS Term ' Create a command builder to generate SQL update, insert, and
        // delete commands based on selectCommand. These are used to
        // update the database.

        SqlCommandBuilder commandBuilder = new SqlCommandBuilder(dataAdapter);

        // Populate a new data table and return the table.
        // MS Term ' Populate a new data table and bind it to the BindingSource.
        DataTable table = new DataTable();
        table.Locale = System.Globalization.CultureInfo.InvariantCulture;
        dataAdapter.Fill(table);
        return table;
    }
    catch
    {
        return null;
    }
}

3)最后,您可以将数据表绑定到其他对象(datagridview,datatable ....)。我不知道代码中的Repeater1是什么对象类型,但是如果它可以接受datatable,那么它将使用return datatable正确绑定。

© www.soinside.com 2019 - 2024. All rights reserved.