Bug Inserimento Dati Binari Su Sqlserver?

Salve a tutti,

devo conservare un file .html di tipo varbinary(MAX) su database sqlserver, ma ricevo un errore al salvataggio.

Per il codice mi sono rifatto a questo esempio: http://www.yiiframework.com/wiki/95/saving-files-to-a-blob-field-in-the-database/

E’ un problema di codice o un bug?

Nella view ho:




'htmlOptions' => array('enctype' => 'multipart/form-data')




<?php echo $form->labelEx($model,'uploadedFile'); ?>

				<?php echo $form->fileField($model,'uploadedFile'); ?>

				<?php echo $form->error($model,'uploadedFile'); ?>



Nel controller:




$model->attributes=$_POST['InventarioPc'];

if($model->save()){

$model->descriz_html->saveAs( Yii::getPathOfAlias('backend.data.descrizpc') . DIRECTORY_SEPARATOR . $model->descriz_html_name);

$this->redirect(array('view','id'=>$model->id_postazione));

			}



Il model




public $uploadedFile;


public function rules()

	{


		return array(

array('uploadedFile', 'file', 'types'=>'html, htm'),

);

	}


public function beforeSave()

	{

		if($file=CUploadedFile::getInstance($this,'uploadedFile'))

		{

			

			$this->descriz_html_name = time() . "-" . $file->name;

			$this->descriz_html = file_get_contents($file->tempName);

			/*

			$this->descriz_html_type=$file->type;

			$this->descriz_html_size=$file->size;

			*/

			//$this->descriz_html=file_get_contents($file->tempName);

			

		}

	

		return parent::beforeSave();

	}



L’errore:




CDbException

throw new CDbException(Yii::t('yii','CDbCommand failed to execute the SQL statement: {error}',

if($model->save())




se commenti

// $this->descriz_html = file_get_contents($file->tempName);

va a buonfine?

prova con un codice di questo tipo, in sql statement con il bind dei parametri:




if($file=CUploadedFile::getInstance($this,'uploadedFile')){

        $t = 'tbl_allegato';

        //var

        $file_name = $file->name;

        $file_type = $file->type;

        $file_size = $file->size;

        $file_contents = file_get_contents($file->tempName);

        // sql                  

        $sql="INSERT INTO ".$t." (file_name,file_size,file_type,file_content) 

        VALUES(:file_name,:file_size,:file_type,:file_content)";

        $connection = Yii::app()->db;

        $command=$connection->createCommand($sql);

        // bind params

        $command->bindParam(":file_name",$file_name,PDO::PARAM_STR);

        $command->bindParam(":file_type",$file_type,PDO::PARAM_STR);

        $command->bindParam(":file_size",$file_size,PDO::PARAM_STR);

        $command->bindParam(":file_content",$file_contents,PDO::PARAM_LOB);

        $command->execute();

}



nemmeno cosi, però se tolgo il file binario riesce a registrarlo.

Ecco qui il pezzo di codice che mi va in errore




if($file=CUploadedFile::getInstance($model,'uploadedFile')){

					$t = 'inventario_pc';

					$file_contents = file_get_contents($file->tempName);

					// sql

					$sql="INSERT INTO ".$t." (cod_dip,nomecomputer, os, ram, disco, processore, licenza, ip_pc, descriz_html_name)

        				VALUES(:cod_dip, :nomecomputer, :os, :ram, :disco, :processore, :licenza, :ip_pc, :descriz_html_name)";

					$connection = Yii::app()->db;

					$command=$connection->createCommand($sql);

					// bind params

					$command->bindParam(":cod_dip",$model->cod_dip,PDO::PARAM_INT);

					$command->bindParam(":nomecomputer",$model->nomecomputer,PDO::PARAM_STR);

					$command->bindParam(":os",$model->os,PDO::PARAM_STR);

					$command->bindParam(":ram",$model->ram,PDO::PARAM_STR);

					$command->bindParam(":disco",$model->disco,PDO::PARAM_STR);

					$command->bindParam(":processore",$model->processore,PDO::PARAM_STR);

					$command->bindParam(":licenza",$model->licenza,PDO::PARAM_STR);

					$command->bindParam(":ip_pc",$model->ip_pc,PDO::PARAM_STR);

					$command->bindParam(":descriz_html_name",$model->descriz_html_name,PDO::PARAM_STR);

					//$command->bindParam(":descriz_html",$file_contents,PDO::PARAM_LOB);

					$command->execute();

					

					$this->redirect(array('view','id'=>$model->id_postazione));

					

				}



prova a cambiare il tipo del campo nel db per il file binario.

[s]Mi sono accorto che i dati riesce a salvarli soltanto da localhost, se li inserisco da esterno (da web) mi registra tutto tranne l’html !!

Qualche impostazione da cambiare?[/s]

Era un problema di permessi, non riusciva a salvare il file nella cartella temp.

Ciao a tutti,

riscontro la stessa eccezione ma purtroppo non credo sia un problema di permessi. Il mio obbiettivo è quello di salvare un file (immagine o altro) su db. In debug riesco a vedere il contenuto del file ed entrando nell’eccezione trovo questo messaggio:

An error occurred translating string for input param 2 to UCS-2: No mapping for the Unicode character exists in the target multi-byte code page.

Purtroppo anche googlando non sono riuscito a trovare nulla.

Qualcuno può darmi una mano?

Grazie!!