Многократная операция «Вставить в» при одном и том же событии - PullRequest
1 голос
/ 19 октября 2011

Ребята, я искал вокруг, как ад, но ничто не могло мне помочь, поэтому я думаю, что пришло время спросить.Прежде чем писать в проблему, я должен сказать, что мне нужно ее решение как можно скорее, потому что это проект, который я должен дать завтра, и я застрял на одном предмете с давних времен и все еще теряю время.

Хорошо, вот оно;

Мне нужно добавить книгу в библиотечную систему, на первом этапе я добавляю стандартные функции книги, которые имеют только «одно значение», например (имя, номер страницы, время публикации, идентификатор издателя и т. Д.), Но по желаниюПо моей книге МОЖЕТ ИМЕТЬ НЕСКОЛЬКО ПИСАТЕЛЕЙ И КАТЕГОРИЙ, которые убили меня, и до сих пор я не могу решить.Я попытался добавить книгу в таблицу (книг), затем с информацией, которую я получил, я сделал другую операцию вставки.к (bookWriters) таблице.Пока я это проверяю, компилятор все делает по порядку без ошибок, но когда я проверяю таблицу из SQL Server, ничего не получается.

Вот что я пытался сделать;

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;
using System.Data.SqlClient;

namespace Project_
{
    public partial class addBook: Form
    {
        public addBook()
        {
            InitializeComponent();
        }

        public main refForm;

        int chosenWritersNumber; //how many writers have selected on listbox
        int[] writers= { }; // an array list that i keep writerIDs that comes from class
        int ind = 0;

        int insertedBookID; // to catch latest added book's ID
        int chosenWriterID; // writer that will be added

        private void bookAddingPreps()
        {
            chosenWritersNumber = lstWriters.SelectedItems.Count;

            Array.Resize<int>(ref writers, chosenWritersNumber );

            for (int i = 0; i < chosenWritersNumber ; i++)
            {
                writers[i] = ((X_Writers)lstWriters.SelectedItems[i]).XWriterID;
            }
        }

        private void addMainBookInfos()
        {
            SqlConnection con = new SqlConnection(Conn.Activated);

            SqlCommand com = new SqlCommand("AddBook", con);

            com.CommandType = CommandType.StoredProcedure;

            com.Parameters.AddWithValue("@BookISBN", txtISBN.Text);            

            con.Close();
        }

        private void catchAddedBookID()
        {
            SqlConnection con = new SqlConnection(Conn.Activated);
            SqlCommand com = new SqlCommand("catchBookID", con);

            com.CommandType = CommandType.StoredProcedure;

            con.Open();
            SqlDataReader dr = com.ExecuteReader();
            if (dr.HasRows)
            {
                while (dr.Read())
                {
                    insertedBookID = dr.GetInt32(0);
                }
            }
            dr.Close();
            con.Close();
        }

        private void addWritersOfTheBook()
        {
            chosenWriterID = writers[ind];

            SqlConnection con = new SqlConnection(Conn.Activated);

            SqlCommand com = new SqlCommand("addBookWriters", con);
            com.CommandType = CommandType.StoredProcedure;

            com.Parameters.AddWithValue("@BookID", insertedBookID);
            com.Parameters.AddWithValue("@WriterID", chosenWriterID);
            con.Close();
        }

Я называю этометоды по нажатию кнопки.Вы также видите имена хранимых процедур, но, как я проверил, все они правильные, на этой странице должна быть ошибка, которую я до сих пор не вижу, но если это необходимо, я могу добавить, какие процедуры пишет, но они все протестированы и, кажется, работают.

Как я уже сказал, когда я делаю это, так как ind = 0, должен быть добавлен писатель, точка останова показывает, что все в порядке, и компилятор не показывает никаких ошибок, но когда я проверяю таблицу сервера sql, она пуста.

Написано на C # с использованием Visual Studio 2010 Ultimate и SQL Server 2008 Dev.

Спасибо

1 Ответ

0 голосов
/ 19 октября 2011

Вы забыли выполнить свою команду SqlCommand.Сделайте вызов command.ExecuteNonReader ();выполнить его, не ожидая каких-либо результатов.см .: http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlcommand.aspx

Помимо формы, не забывайте распоряжаться ресурсами, полученными в ваших методах.Что-то вроде:

private void addMainBookInfos() 
{ 
    using (SqlConnection con = new SqlConnection(Conn.Activated))
    using (SqlCommand com = new SqlCommand("AddBook", con))
    {
        com.CommandType = CommandType.StoredProcedure; 
        com.Parameters.AddWithValue("@BookISBN", txtISBN.Text);             

        com.ExecuteNonQuery()

        // close can be omitted since you are already using the 'using' statement which automatically closes the connection
        con.Close(); 
    }
} 
...