2016-03-20 14 views
1

元々プログラムすることを学んだとき、3つの結果が出る可能性があると言われました。エラーがあったり、うまくいったり、何も起こらなかったりします。SQL Serverでinsertストアドプロシージャを使用する

私は現時点で問題が最後であり、送信するエラーメッセージはありません。ここで

は、Windowsフォームである:

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

これを試すことができますか?あなたのncharはちょうど(10)なので、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

ご協力いただきありがとうございます。

1つのことを変更する必要があった、私はインストールし、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(); 
     } 
    } 
関連する問題