2009-05-28 8 views
0

Mise à jour:erreur de restriction sur les messages entre SQLSERVER et dot.net

J'ai essayé de lancer ceci sur une instance locale de sql-server et malheureusement cela a fonctionné !!!

maintenant je sais que le code est bon et il y a une sorte de restriction DBA Je dois trouver (et demander au DBA d'enlever)

Toutes les idées?

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

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

     } 
    } 
} 

procédure stockée

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

Salut Asaf. Vous devez être plus clair sur ce qu'est le problème réel, au-delà de dire une "restriction sur les messages". Poster des symptômes plus détaillés et les gens sont beaucoup plus susceptibles d'essayer et de vous aider. – Xiaofu

Répondre

0

Est-ce que l'utilisateur que vous vous connectez à votre base de données en utilisant la sécurité intégrée ont l'autorisation EXECUTE sur la procédure stockée (dbo.filltables) car cela indique seulement dbo (propriétaire de la base de données) a des autorisations complètes sur la procédure.

Vous devrez accorder des autorisations pour toute personne souhaitant l'utiliser. Veillez à accorder à TOUS le droit si la sécurité est une préoccupation.

Questions connexes