2009-05-28 15 views
0

更新:SQLSERVERとdot.net間のメッセージに制限エラー

これをSQL Serverのローカルインスタンスで実行しようとしましたが、悲しいことに、これはうまくいきました。

今私はコードが正しいと私は見つける(および削除するためにDBAを頼む)する必要があるDBA制限のいくつかの種類があることを知っている

任意のアイデア?

using System; 
using System.Collections.Generic; 
using System.Text; 
using System.Data.SqlClient; 
using System.Data; 

namespace testDBMessages 
{ 
    public class CGeneral 
    { 
     // Declare and instantiate connection 
     private static Form1 caller; 

     public CGeneral(Form1 caller1) 
     { 
      caller = caller1; 
      string connString = "server=(local)\\SQLEXPRESS;database=tests;Integrated Security=SSPI"; 

      SqlConnection cn = new SqlConnection(connString); 

      cn.InfoMessage += new SqlInfoMessageEventHandler(CnInfoMessage);    
      cn.FireInfoMessageEventOnUserErrors = true; 
      SqlCommand cmd = new SqlCommand(); 

      String sql = "dbo.fillTables"; 
      cmd.Connection = cn; 
      cmd.CommandType = CommandType.StoredProcedure; 
      cmd.CommandText = sql; 
      cmd.Parameters.Add(new SqlParameter("@test", 6)); 
      try 
      { 
       cn.Open();     
       SqlDataReader sdr; 
       sdr = cmd.ExecuteReader(CommandBehavior.CloseConnection); 
      } 
      catch (SqlException ex) 
      { 
       Console.WriteLine(ex.Message); 
      } 
      finally 
      { 
       cn.Close(); 
      } 
     } 

     static void CnInfoMessage(object sender, SqlInfoMessageEventArgs ev) 
     { 
      foreach (SqlError err in ev.Errors) 
      {     
       Console.WriteLine("Message- " + err.Message); 
       caller.addMessage(err.Message); 
      } 
     }  
    } 
} 

フォームコード

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

namespace testDBMessages 
{ 
    public partial class Form1 : Form 
    { 
     public Form1() 
     { 
      InitializeComponent(); 
     } 

     private void button1_Click(object sender, EventArgs e) 
     { 
      CGeneral a = new CGeneral(this); 
     } 

     private void Form1_Load(object sender, EventArgs e) 
     { 
      Application.DoEvents();    
     } 

     public void addMessage(string msg) 
     { 
      listView1.Items.Add(msg); 
      listView1.Refresh(); 

     } 
    } 
} 

ストアドプロシージャ

ALTER PROCEDURE [dbo].[fillTables] 
(
    @test smallint 
) 

AS 

BEGIN 
    declare @counter as int 
    SET @counter=1 
    while @counter<100 
    BEGIN 
     Insert into tests.dbo.tToFill (id,description,testNum) 
     Values (@counter,'test_1',@test) 
RAISERROR ('RECORD NUM %d',10,1,@counter) 
     SET @[email protected]+1 
    END 
END 
GO 
+0

こんにちは。あなたは実際の問題が何であるかを明確にする必要があります。より詳細な症状を投稿すると、人々はあなたを助けようとします。 – Xiaofu

答えて

0

はあなたが統合セキュリティを使用してデータベースに接続ユーザーがEXECUTE権限を持っていないことを確信していますストアドプロシージャ(dbo.filltables)は、dbo(データベース所有者)のみがそのプロシージャに対して完全なアクセス権を持っていることを示します。

これを使用するすべてのユーザーにアクセス許可を与える必要があります。セキュリティが懸念される場合は、すべての人に権限を与えることに注意してください。