1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

C#+SQLstoredProcedure

Discussão em 'Programação' iniciada por mrbabs, 11 de Junho de 2008. (Respostas: 3; Visualizações: 594)

  1. Viva, estou a tentar utilizar uma stored procedure num programa em C# que insira um fx numa bd, mas estou com um pequeno problema. isto que eu escrevi, supostamente estaria correcto! (digo eu :P) :S o codigo que trata os parametros, é este, e a stored procedure vem logo a seguir! o Erro que me está a dar, prende-se com o facto de supostamente a storedprocedure que estou a invocar estar á espera do parametro @p_FileID, mas como podem ver, ele está a ser tratado no meu codigo! :S

    ......
    Código:
    using (SqlConnection cnn = new SqlConnection(cnnStr.Text))
                {
                    using (SqlCommand cmd = new SqlCommand("[Files_Insert]", cnn))
                    {
                        FileStream fs = File.Open(tbFile.Text, FileMode.Open, FileAccess.Read);
                        int length = (int)fs.Length + 1;
                        fs.Close();
    
                        cmd.CommandType = CommandType.StoredProcedure;
    
    [B]                     SqlParameter prm = new SqlParameter("@P_FILE_ID", SqlDbType.UniqueIdentifier, 16);
                        prm.Direction = ParameterDirection.ReturnValue;
                        cmd.Parameters.Add(prm);
    
                        prm = new SqlParameter("@P_FILE", SqlDbType.VarBinary, length);
                        prm.Value =  File.ReadAllBytes(tbFile.Text);
                        cmd.Parameters.Add(prm);[/B] 
    
                        cnn.Open();
                        int i = cmd.ExecuteNonQuery();
    
                    }
                }
    .....
    Stored Procedure:

    Código:
    ALTER PROCEDURE [dbo].[Files_Insert](
          @P_FILE_ID uniqueidentifier output,
          @P_FILE varbinary(MAX))    
    AS
    BEGIN
        DECLARE @GUID uniqueidentifier
        SET @GUID = NEWID()
        
        SET NOCOUNT ON;   
        INSERT INTO [FILE_VALUE]
            (
                FILE_ID,
                [FILE]
            )
            VALUES
            (
                @GUID,
                @P_FILE
            )
        SET @P_FILE_ID = @GUID
    
    END
    erro:

    [​IMG]

    se alguem me puder dar uma ajudinha! eu fico mt agradecido! :D

    [​IMG]
     
    Última edição pelo moderador: 12 de Junho de 2008
  2. samouco

    samouco Power Member

    Boas.

    Em vez de usares esse "comboio" usa antes:


    Código:
     
    int pFileId = 0;
     
    cmd.Parameters.AddWithValue("@p_file_id", pFileId).Direction = ParameterDirection.InputOutput;
     
    cmd.Parameters.AddWithValue("@p_file",length);
     
    cmd.ExecuteNonQuery();
     
    pFileId = Convert.ToInt32( cmd.Parameters["@p_file_id"].Value);
     
    
    Assim deve funcionar... O problema é q não estás a passar o parametro pFileId
     
    Última edição: 12 de Junho de 2008
  3. Viva, realmente com a tua sugestão foi mais facil de chegar ao resultado pretendido! no entanto a tua sugestão não estava correcta, apesar de ser esse o caminho! isto porque, como podes ver no codigo da stored procedure, o campo File_ID é uma variavel do tipo uniqueidentifier, assim sendo tive que alterar esse parametro de modo a ser aceite na stored e de modi a ser returnado nos parametros do comando sql. assim sendo, ficou qq coisa deste genero:

    ....
    Código:
    FileInfo fi = new FileInfo(tbFile.Text);
                        StreamReader sr = fi.OpenText();
                        string str = (string)sr.ReadToEnd();      // File Content, this should be Binary data
                        byte[] stream = ConvertToByte(str, str.Length);
                                           
                        cmd.Parameters.AddWithValue("@p_file_id", new System.Guid()).Direction = ParameterDirection.InputOutput;
                        cmd.Parameters.AddWithValue("@p_file", stream);
    
                        cnn.Open();
                        cmd.ExecuteNonQuery();
    ....

    Desde já o meu muito Obrigado :)
     
    Última edição pelo moderador: 13 de Junho de 2008
  4. samouco

    samouco Power Member

Partilhar esta Página