2016-03-20 10 views
1

Когда я учился программировать изначально, мне сказали, что существует 3 возможных результата; произошла ошибка, это сработало, или ничего не произошло.Использование встроенной хранимой процедуры с SQL Server

У меня есть последняя проблема на данный момент, и для меня нет сообщения об ошибке.

Вот окна формы:

screenshot of windows form

Код для кнопок выглядит следующим образом.

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 

using System.Data; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using System.Windows.Forms; 
using System.Data.Sql; 
using System.Data.SqlClient; 

namespace Basque 
{ 
    public partial class Form1 : Form 
    { 
     private String strFirstName; 
     private String strLastName; 

     public Form1() 
     { 
      InitializeComponent(); 
     } 

     private void btnSave_Click(object sender, EventArgs e) 
     { 
      strFirstName = txtFirstName.Text; 
      strLastName = txtLastName.Text; 
      int tempNo; 
      AddNames(strFirstName, strLastName); 
      txtFirstName.Clear(); 
      txtLastName.Clear(); 
     } 

     private void btnExit_Click(object sender, EventArgs e) 
     { 
      this.Close(); 
      this.Dispose(); 
     } 

     public void AddNames(String strFirstName, String strLastName) 
     { 
      String connString = @"Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\BasqueNames.mdf;Integrated Security=True"; 

      SqlConnection oCON = new SqlConnection(connString); 
      oCON.Open(); 

      SqlCommand oCMD = new SqlCommand(); 
      oCMD.Connection = oCON; 
      oCMD.CommandType = CommandType.StoredProcedure; 
      oCMD.CommandText = "usp_BasqueNames_Insert"; 

      oCMD.Parameters.AddWithValue("@First", strFirstName); 
      oCMD.Parameters.AddWithValue("@Last", strLastName); 

      oCMD.ExecuteNonQuery(); 
      oCON.Close(); 
     } 
    } 
} 

Схема для базы данных выглядит следующим образом

CREATE TABLE [dbo].[Names] 
(
    [Id]  INT  IDENTITY (1, 1) NOT NULL, 
    [FirstName] NCHAR (10) NULL, 
    [LastName] NCHAR (10) NULL, 
    PRIMARY KEY CLUSTERED ([Id] ASC) 
); 

И хранимая процедура выглядит следующим образом

CREATE PROCEDURE usp_BasqueNames_Insert 
    @First NCHAR(10), 
    @Last NCHAR(10) 
AS 
    INSERT INTO Names(FirstName, LastName) 
    VALUES (@First, @Last) 

    RETURN @@identity 

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

+1

Красный x может быть ошибкой, которую вы должны указать. Наведите указатель мыши на него и посмотрите, появится ли всплывающее окно, чтобы дать вам более подробную информацию. – Theo

+1

Совет: '@@ IDENTITY' может возвращать неожиданные результаты, если присутствуют триггеры. «SCOPE_IDENTITY» - лучший выбор. (И узнайте о предложении 'OUTPUT' для более поздних версий.) – HABO

+0

Вы уверены, что при нажатии кнопки выполняется метод btnSave_Click? –

ответ

0

Вы можете попробовать это? И убедитесь, что вы пытаетесь передать значение не более 10 символов, так как ваш nchar - это просто (10);

private void btnSave_Click(object sender, EventArgs e) 
     { 
      AddNames(txtFirstname.Text, txtLastName.Text); 
      txtFirstName.Clear(); 
      txtLastName.Clear(); 
     } 


     public void AddNames(string strFirstName, string strLastName) 
     { 
      String connString = @"Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\BasqueNames.mdf;Integrated Security=True"; 

      using(SqlConnection oCON = new SqlConnection(connString)) 
      { 
      SqlCommand oCMD = new SqlCommand("usp_BasqueNames_Insert",oCon); 
    oCMD.CommandType = CommandType.StoredProcedure; 

      oCMD.Parameters.Add("@First", SqlDbType.Nchar).Value = strFirstName; 
      oCMD.Parameters.Add("@Last", SqlDbType.Nchar).Value = strLastName; 

      oCMD.ExecuteNonQuery(); 
      } 
     } 
0

Спасибо за все рекомендации и поддержку.

Одна вещь должна была измениться, мне пришлось установить и подключиться к sql express. Я обнаружил, что база Visual Studio была ненадежной в Visual Studio для подключения.

private void btnSave_Click(object sender, EventArgs e) 
    { 
     AddNames(txtFirstname.Text, txtLastName.Text); 
     txtFirstName.Clear(); 
     txtLastName.Clear(); 
    } 


    public void AddNames(string strFirstName, string strLastName) 
    { 
     String connString = @"Data Source=ERNIE\SQLEXPRESS;Initial Catalog=LeatherDress;Integrated Security=True;Connect Timeout=15;Encrypt=False;TrustServerCertificate=True;ApplicationIntent=ReadWrite;MultiSubnetFailover=False"; 


     using(SqlConnection oCON = new SqlConnection(connString)) 
     { 
     SqlCommand oCMD = new SqlCommand("usp_BasqueNames_Insert",oCon); 
     oCMD.CommandType = CommandType.StoredProcedure; 

     oCMD.Parameters.Add("@First", SqlDbType.Nchar).Value = strFirstName; 
     oCMD.Parameters.Add("@Last", SqlDbType.Nchar).Value = strLastName; 

     oCON.open(); 
     oCMD.ExecuteNonQuery(); 
     oCON.close(); 
     } 
    } 
Смежные вопросы