Использование SQLDataReader для вставки нескольких строк в таблицу - PullRequest
0 голосов
/ 07 сентября 2011

Я, вероятно, иду по этому пути неправильно, но здесь идет речь:

Я запускаю клубную базу данных на сервере SQL, которая включает в себя функцию входа в ASP.Мне предоставили все данные членов в электронной таблице, и я пытаюсь импортировать каждого члена Клуба в базу данных с их собственным логином.

Я импортировал электронную таблицу в таблицу под названием Historical $ и использовал Питер Келлнер. Редактор членства для настройки таблиц членства ASP в моей базе данных.Отлично работает!

Поэтому у меня есть все члены моего клуба в качестве члена ASP с их собственными данными для входа в систему, но теперь я хочу поместить всю свою информацию (адрес, пол и т. Д.) В таблицу, которая использует уникальный идентификатор пользователя "UniqueIdentifier""из таблиц членства ASP в качестве внешнего ключа.

Короче говоря, я хочу импортировать выбранные поля из моей исходной таблицы (Historical $) + соответствующий идентификатор пользователя из таблицы aspnet_Membership в пустую таблицу с именем" Club_Member ".Я бы предпочел использовать структуру, которая у меня уже есть в Club_member, если это возможно.

Исходная таблица Historical $:

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 терпит неудачу.

Первый вопрос: я на правильном пути или есть лучший способ?
Во-вторых, что может быть причиной ошибки?Я не против, если кто-то придумает более легкий путь, потому что это должно быть «одноразовым», но я не понимаю, как это сделать!(Кстати, знания ASP.NET/C# ограничены, знания SQL очень ограничены!)

Спасибо, и извините за эссе.

1 Ответ

1 голос
/ 07 сентября 2011

Это должно быть сделано полностью в 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...