我可能会以错误的方式解决这个问题,但这里有:
我正在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知识非常有限!)
谢谢,对这篇文章感到抱歉。
答案 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