2016-01-03 2 views
-1

У меня есть база данных SQL с указанным относительным пути к файлу. Я знаю, что путь к файлу работает, потому что программа работает без ошибок. Тем не менее, мой SQL работал нормально, пока я не изменил путь к файлу с полного пути к этому относительному пути.C# База данных SQL, не вставляющая данные

Когда я нажимаю кнопку отправки на своем WFA, программа выглядит так, как будто она сохраняется в базе данных, так как есть кратковременная пауза, но когда я смотрю в свою таблицу Student, данные не были вставлены. Опять же, ошибок нет.

Я добавил точку останова на command.Parameters.AddWithValue("@FullName", sFnameTxtBox.Text);, и она не отображается на вкладке местных жителей.

На вкладке источников данных иногда появляется значок красного x на SRSDB.mdf, однако, когда я обновляю его, значок красного x исчезает.

Когда пользователь вводит свои данные в текстовые поля, детали должны быть вставлены в таблицу student после нажатия кнопки «Отправить».

using System.Data.Sql; 
using System.Data.SqlClient; 
using System.Configuration; 
using System.IO; 
namespace WindowsFormsApplication1 
{ 
    public partial class Form1 : Form 
    { 
     SqlCommand command; 
     SqlConnection connection; 
     SqlDataAdapter dataAdapter; 

     private void button1_Click(object sender, EventArgs e) 
     { 

      connection = new SqlConnection(@"Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename="+ Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "SRSDB.mdf")); 

      connection.Open(); 

      command = new SqlCommand("INSERT INTO Student (FullName, Email, TelNo,  Username, Password) VALUES (@FullName, @Email, @TelNo, @Username, @Password)", connection); 

      command.Parameters.AddWithValue("@FullName", sFnameTxtBox.Text); 

      command.Parameters.AddWithValue("@Email", sEmailTxtBox.Text); 

      command.Parameters.AddWithValue("@TelNo", sTelNoTxtBox.Text); 

      command.Parameters.AddWithValue("@Username", sUnameTxtBox.Text); 

      command.Parameters.AddWithValue("@Password", sPwordTxtBox.Text); 

      command.ExecuteNonQuery(); 
     } 
    } 
} 
+0

где значение передачи параметра @FullName –

+0

В вашем коде отсутствует 'command.Parameters.AddWithValue (" @ FullName ", sFnameTxtBox.Text);' строка в вашем коде. –

+1

Как именно вы добавили точку прерывания в строку кода, которая не существует? Когда вы попытаетесь выполнить этот запрос, вы * * получите ошибку. Изучите эту ошибку, это говорит вам о проблеме. Кроме того, обратите внимание, *** никогда не хранит пароли пользователей в виде простого текста ***. Это *** абсолютно безответственно *** для ваших пользователей. – David

ответ

0

Я бы сделал вывод, что по какой-то причине вы пишете в другом месте, чем вы думаете.

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

Я бы вытащить строительство пути в локальную переменную:

string dbPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "SRSDB.mdf"); 
connection = new SqlConnection(@"Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=" + dbPath); 

поставить точку останова на этом, получить значение , и посмотреть, что там. Это файл MDF, который вы ожидаете?

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

+0

Я пробовал то, что предложил Хэмиш, но он дает мне синтаксическую ошибку, говорящую «,» ожидается во второй строке @ dbpath, а также: Аргумент 2: невозможно преобразовать из «string» в «System.Data.SqlClient.SqlCredential» –

+0

Я пропустил «+». Моя ошибка в том, что вы не запускаете код, чтобы проверить его в первую очередь. Теперь я запускаю код. Путь выглядит корректно, но находится в корневой папке. Где ваш MDF, который виден в вашем проекте? Вы можете проверить это, посмотрев раздел «Проводник сервера», щелкнув по базе данных и проверив свойства (щелкните правой кнопкой мыши/Свойства). Строка соединения, которую вы строите в коде, должна соответствовать строке подключения базы данных, которую вы можете увидеть в проекте. – Hamish

+0

Я добавил точку прерывания, и она указывает на папку bin \ debug, у меня есть моя база данных, сохраненная там, поскольку она автоматически сохраняется в папке отладки, и я сохранил ее в каталоге перед bin. Если я перезаписываю базу данных в bin \ debug, он возвращает файл не найден, иначе он не возвращает ошибку. –

Смежные вопросы