2017-10-17 22 views
-2

Voici le plan: J'ai une table appelée Mappastruktúra (dossiers) et une table pour les utilisateurs, dans la table Folders nous stockons le nom des dossiers, folder_id, parent_id, et uploader_name.C# & SQL Server: comment créer une vue?

Je souhaite créer une vue pour chaque utilisateur.

vient ici ma logique # 1:

SqlConnection con = new SqlConnection(@"Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=C:\Users\Roland\Desktop\IBCONTROLL\BIZT.MENTÉS\program_1.7\db_connect_ver_1\login.mdf;Integrated Security=True"); 

var dt = new DataTable(); 
string username = "mate"; 

con.Open(); 
string query = "CREATE VIEW viewname AS SELECT count(*) FROM Mappastruktúra WHERE [email protected];"; 

var sda = new SqlDataAdapter(query, con);   
sda.SelectCommand.Parameters.AddWithValue("@username", SqlDbType.VarChar); 
sda.SelectCommand.Parameters["@username"].Value = username;    

sda.Fill(dt); 

LogiC# 2

var reg = new SqlCommand("CREATE VIEW viewname AS SELECT count(*) FROM Mappastruktúra WHERE [email protected];", con); 
reg.Parameters.Add("@username", SqlDbType.VarChar); 
reg.Parameters["@username"].Value = username; 

reg.ExecuteNonQuery(); 

Aucun d'entre eux travaillent, les deux montrent le même message d'erreur:

System.Data .SqlClient.SqlException: 'Syntaxe incorrecte près du mot-clé' VIEW '

EDIT: Voici une photo à son sujet here's the pic

+0

suivants sont vous vraiment Voulez-vous une vue pour chaque utilisateur? – Twelfth

+0

Vous n'avez pas besoin de "créer une vue". Supprimez simplement les directives 'CREATE VIEW' et lancez une instruction SQL' SELECT' normale. – JuanR

+3

les vues n'ont pas de paramètres - les procédures stockées ont des paramètres. – Hogan

Répondre

0

Cela peut être une question sur C# et non SQL. Si tel est le cas, la réponse est qu'il existe un certain nombre de systèmes de modèles en C# - il se peut que ce soit ce que vous voulez. StringFormat est le plus facile:

Par exemple

var query = StringFormat("CREATE VIEW %s AS SELECT count(*) FROM Mappastruktúra WHERE username='%s'","HOGAN_COUNT","Hogan"); 

Créerait une chaîne de requête que vous pouvez utiliser pour créer la vue. Ce code pourrait être mis en boucle pour créer un tas de vues.


réponses SQL:

CREATE VIEW USER_COUNT AS 
SELECT username, COUNT(*) as C 
FROM [Mappastruktúra] 
GROUP BY username 

puis

SELECT C 
FROM USER_COUNT 
WHERE [email protected] 

si vous voulez vraiment une vue pour chaque utilisateur que vous pourriez faire la

CREATE VIEW HOGAN_COUNT AS 
SELECT C 
FROM USER_COUNT 
WHERE username='Hogan' 
+0

Ceci est une réponse tout à fait valide, mais difficile à upvote car vous donnez au gars des instructions claires sur la meilleure façon de se tirer une balle dans le pied ... à plusieurs reprises ... et comment recharger pour continuer à tirer sur son pauvre pied . – Twelfth

+0

@Telfelfth - nous ne le savons pas, je peux penser à de nombreuses raisons de vouloir faire automatiquement des vues comme ça. La sécurité est l'un d'eux eux. Solution en lecture seule assez sécurisée si tout le monde a sa propre vue. Ça "sent" mauvais, mais on ne sait pas avec certitude que c'est mauvais. – Hogan

+0

la sécurité est la seule réponse peut-être que je peux voir, et je suis sûr qu'il y a de bien meilleures options. Peut-être voudrait-il lui donner le code sql pour créer des utilisateurs et accorder des autorisations aux vues en même temps;) Il pourrait aussi bien automatiser son cauchemar d'autorisation d'affichage. – Twelfth