使用SQLDataReader在表中插入多行

时间:2011-09-07 06:45:14

标签: c# ado.net sqldatasource sqldatareader

我可能会以错误的方式解决这个问题,但这里有:

我正在SQL服务器中启动一个包含ASP登录功能的俱乐部数据库。我在电子表格中获得了所有成员的详细信息,并尝试使用自己的登录信息将每个俱乐部成员导入数据库。

我已将电子表格导入名为Historical $的表格,并使用Peter Kellner的Membership Editor在我的数据库中设置ASP成员资格表。效果很好!

因此,我将所有俱乐部“成员”作为ASP会员,并拥有自己的登录详细信息,但现在希望将所有信息(地址,性别等)放在使用ASP Membership表中的UniqueIdentifier“UserId”的表中作为外键。

简而言之,我想将源表中的选定字段(历史$)+ aspnet_Membership表中相应的UserId导入名为“Club_Member”的空表。如果可能的话,我更愿意使用Club_member中已有的结构。

来源表历史$:

Mem_no  
Firstname  
Lastname  
email1  
...  

源表aspnet_Membership:

...  
UserId  
...  
Email  
...

目标表Club_Member:

UserId  
Firstname  
Lastname  
Email  
...

我认为最好的方法是使用SQLDataReader选择带有表连接的字段,读取结果中的每一行并插入到新表中,但是在编写插入到新表中的逻辑和语法时遇到问题新表。
C#代码:

protected void ButtonTransfer_Click(object sender, EventArgs e)
    {

        SqlConnection con = new SqlConnection(connectionString);
        string strSQL1 = "Select Historical$.memnum, Historical$.first, Historical$.last, aspnet_Membership.UserId FROM aspnet_Membership INNER JOIN Historical$ ON aspnet_Membership.Email = Historical$.email1";
       con.Open();
         SqlCommand myCommand = new SqlCommand(strSQL1, con);

        SqlDataReader TransReader;
        TransReader= myCommand.ExecuteReader();
        while (TransReader.Read())
        {

            SqlDataSource1.Insert();
        }
    }  

ASP代码:

        <asp:SqlDataSource ID="SqlDataSource1" runat="server" 
        ConnectionString="<%$ ConnectionStrings:wtcConnectionString %>" 
        InsertCommand="INSERT INTO member(UserId, mem_number, mem_fname, mem_lname) VALUES (@UserId, @memnum, @first, @last)">
        <InsertParameters>
            <asp:Parameter Name="UserId" />
            <asp:Parameter Name="memnum" />
            <asp:Parameter Name="first" />
            <asp:Parameter Name="last" />
        </InsertParameters>
    </asp:SqlDataSource>        

我收到错误:无法将值NULL插入列'UserId',表Club_Member;列不允许空值。 INSERT失败。

第一个问题是,我是在正确的轨道上,还是有更好的方法? 其次,可能导致错误的原因是什么? 我不介意有人想出一个更简单的方法,因为这应该是“一次性”但我不知道如何去做! (BTW ASP.NET / C#知识有限,SQL知识非常有限!)

谢谢,对这篇文章感到抱歉。

1 个答案:

答案 0 :(得分:1)

这应该在SQL中完全使用INSERT语句完成,例如:

INSERT Club_Member (UserID, Firstname, Lastname, Email....)
SELECT m.UserID, c.FirstName, c.LastName, c.Email1
FROM aspnet_membership m
JOIN [Historical$] c on m.EMail = c.Email1