C#+SQLstoredProcedure

mrbabs

Membro
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:

Sem%20t%C3%ADtulo.GIF


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

moz-screenshot.jpg
 
Última edição pelo moderador:
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:
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:
Back
Topo