2009-05-28 8 views
0

Update:Einschränkung Fehler auf Nachrichten zwischen SQLSERVER und dot.net

Ich habe versucht, dies auf einer lokale Instanz von SQL-Server laufen zu lassen und leider ist es !!!

jetzt weiß ich, dass der Code richtig ist, und es gibt eine Art von DBA Beschränkung finde ich, müssen (und fragen Sie das DBA entfernen)

Irgendwelche Ideen?

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); 
      } 
     }  
    } 
} 

Form Code

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(); 

     } 
    } 
} 

Stored Procedure

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

Hallo Asaf. Sie müssen klarer sein, was das eigentliche Problem ist, über eine "Beschränkung auf Nachrichten" hinaus. Posten Sie detailliertere Symptome, und die Leute werden viel eher versuchen, Ihnen zu helfen. – Xiaofu

Antwort

0

Hat der Benutzer, die Sie als mit der integrierten Sicherheit auf dem EXECUTE-Berechtigung Verbindung zu Ihrer Datenbank Stored Procedure (dbo.filltables) zeigt an, dass nur dbo (Datenbankeigner) vollständige Berechtigungen für die Prozedur besitzt.

Sie müssen Berechtigungen für jeden erteilen, der sie verwenden möchte. Achten Sie darauf, JEDER das Recht zu geben, wenn Sicherheit ein Problem darstellt.

Verwandte Themen