2009-09-04 27 views
14

Me gustaría almacenar scripts largos .sql en mi solución y ejecutarlos programáticamente. Ya he descubierto cómo ejecutar una cadena que contiene mi script sql, pero no he descubierto cómo leer la cadena de un archivo que se almacenará en la solución (en una subcarpeta/Scripts, por ejemplo).Ejecutar un script SQL almacenado como recurso

+0

Hay una respuesta muy detallada sobre el recurso incrustado en una pregunta duplicado https://stackoverflow.com/questions/23301964/ef-6-code-first-with-custom-stored -procedure/39673550 # 39673550 –

Respuesta

19

Primero, edite las propiedades del archivo .sql para que se incruste como recurso.

A continuación, utilice código similar al siguiente para recuperar el script:

string commandText; 
Assembly thisAssembly = Assembly.GetExecutingAssembly(); 
using (Stream s = thisAssembly.GetManifestResourceStream(
     "{project default namespace}.{path in project}.{filename}.sql")) 
{ 
    using (StreamReader sr = new StreamReader(s)) 
    { 
     commandText = sr.ReadToEnd(); 
    } 
} 
+2

@Will - En un proyecto SQL CLR parece que no hay forma de agregar un archivo de recursos fuertemente tipado. – jpierson

+1

Los recursos de @Will son una solución pobre también, imho. No parece haber una manera de modificar los comentarios generados en XML, y resúmenes como * Busca una cadena localizada similar a la que crea la tabla dbo.Foo (... * apenas son útiles. – Stijn

24

añadir los archivos SQL para su proyecto a continuación, crear un nuevo archivo de recursos. Abra el archivo SQL y seleccione 'Archivos' en el menú desplegable superior izquierdo (el valor predeterminado es Cadenas). Luego presiona agregar recurso y navega hacia/selecciona el archivo SQL. Esto le permite obtener SQL del archivo de recursos sin perder la seguridad de tipos, así:

SqlFiles.SqlScript

Lo anterior es el proceso en Visual Studio 2010. También escribí sobre esto en my blog.

+0

Sepa que esta es una publicación anterior. muy claro, pero ¿cómo se puede agregar parámetros al script? – zmaster

+0

Debería poder usar 'string.Format' para esto. –

+0

Agregar a resrouces, y establecer el archivo en Resources, en el código escribir NAMESPACE.Properties.Resources .ScriptDB.ToString() –

0

Agregar archivo a Recursos y conjunto de archivos de recursos , en el código de escritura:

String SQLCommand = NAMESPACE.Properties.Resources.ScriptDB.ToString() 
0

Uso QueryFirst. Pones tu sql en la plantilla .sql proporcionada por la herramienta. Detrás de escena, QueryFirst lo compila como un recurso y conecta la llamada para recuperarla en tiempo de ejecución. Solo necesita preocuparse por llamar a Execute() en la clase contenedora generada, y sus resultados son accesibles a través de POCO generados. Seguridad de extremo a extremo. Nunca tiene que recordar un nombre de columna o tipo de datos, además de las considerables ventajas de tener su sql donde Dios pretendía ... en un archivo .sql.

exención de responsabilidad: Escribí QueryFirst

Cuestiones relacionadas