1

私のストアドプロシージャは次のとおりです。

ALTER PROCEDURE [dbo].[ThemTram] 
(   
    @Ten nvarchar(50),
    @KhuVucID int,
    @TenTinh nvarchar(50),
    @TinhID int,
    @TenTram nvarchar(50)
)
AS
set @KhuVucID = (select KhuVuc.KhuVucID from KhuVuc where KhuVuc.Ten=@ten)
set @TinhID =(select Tinh.TinhID from Tinh Where (Tinh.TenTinh=@TenTinh and Tinh.KhuVucID=@KhuVucID))
if not exists (select Tram.TenTram from Tram where (Tram.TenTram=@TenTram and Tram.TinhID = @TinhID))
Begin
    insert into Tram(TenTram,TinhID) values (@TenTram,@TinhID)
end

そして私のC#プログラム:

    private void ThemTramBT_Click(object sender, EventArgs e)
    {
        string conn = "Data Source=USER-PC;Initial Catalog=NCKHmoi;Integrated Security=True";
        SqlConnection connect = new SqlConnection(conn);
        SqlCommand command = new SqlCommand();
        command.Connection = connect;
        connect.Open();
        command.CommandType = CommandType.StoredProcedure;
        command.CommandText = "ThemTram";
        command.Parameters.Add("@Ten", SqlDbType.NVarChar, 50).Value = KhuVucComboBox.Text;
        command.Parameters.Add("@TenTinh", SqlDbType.NVarChar, 50).Value = TinhComboBox.Text;
        command.Parameters.Add("@TenTram", SqlDbType.NVarChar, 50).Value = ThemTramTB.Text;
        command.Dispose();
        connect.Close();
    }

しかし、問題があります。c# コードで。新しいデータを挿入できません。私を助けてください。

4

1 に答える 1

3

コマンドを実行していません。余談ですが、実際には and でusingステートメントを使用する必要がSqlConnectionあります (それほど重要ではありません) SqlCommand:

private void ThemTramBT_Click(object sender, EventArgs e)
{
    string conn = "Data Source=USER-PC;Initial Catalog=NCKHmoi;Integrated Security=True";
    using (SqlConnection connect = new SqlConnection(conn))
    {
        using (SqlCommand command = new SqlCommand("ThemTram", conn))
        {
            connect.Open();
            command.CommandType = CommandType.StoredProcedure;
            command.Parameters.Add("@Ten", SqlDbType.NVarChar, 50).Value = KhuVucComboBox.Text;
            command.Parameters.Add("@TenTinh", SqlDbType.NVarChar, 50).Value = TinhComboBox.Text;
            command.Parameters.Add("@TenTram", SqlDbType.NVarChar, 50).Value = ThemTramTB.Text;

            command.Parameters.AddWithValue("@KhuVucID", DBNull.Value); //need to pass even if not used
            command.Parameters.AddWithValue("@TinhID", DBNull.Value); //need to pass even if not used
            command.ExecuteNonQuery();
        }
    }
}

編集:

あなたのコメントに基づいて、あなたの sproc がそのようにコーディングされている理由は明らかではありません。以下のように変更することをお勧めします。

ALTER PROCEDURE [dbo].[ThemTram] 
(   
    @Ten nvarchar(50),
    @TenTinh nvarchar(50),
    @TenTram nvarchar(50)
)
AS

declare @KhuVucID int
declare @TinhID int

select @KhuVucID = KhuVuc.KhuVucID from KhuVuc where KhuVuc.Ten = @ten
select @TinhID = Tinh.TinhID from Tinh Where Tinh.TenTinh = @TenTinh and Tinh.KhuVucID = @KhuVucID

if not exists (select Tram.TenTram from Tram where Tram.TenTram = @TenTram and Tram.TinhID = @TinhID)
begin
    insert into Tram(TenTram, TinhID) values (@TenTram, @TinhID)
end
于 2013-02-01T10:11:37.250 に答える