2017-10-17 7 views
-2

私はMappastruktúra(Folders)というテーブルとユーザー用のテーブルを持っています。Foldersテーブルには、フォルダの名前、folder_id、parent_id、およびuploader_nameが格納されています。C#とSQL Server:ビューを作成する方法は?

各ユーザーのビューを作成したいとします。ここで

は私のロジック#1来る:

System.Data:

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); 

ロジック#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(); 

は、それらのどれも機能していない、両方が同じエラーメッセージを表示します.SqlClient.SqlException: 'キーワード' VIEW 'の近くの構文が正しくありません

編集:ここにそれについての図がありますhere's the pic

+0

は、あなたが本当に確信しています各ユーザーのビューが必要ですか? – Twelfth

+0

「ビューを作成する」必要はありません。 'CREATE VIEW'ディレクティブを削除し、通常の' SELECT' SQL文を発行するだけです。 – JuanR

+3

ビューにはパラメータがありません - ストアドプロシージャにはパラメータがあります。 – Hogan

答えて

0

これはC#とSQLについての質問であるかもしれません。そうであれば、答えはC#にテンプレートシステムの数があるということです - あなたの望むものであるかもしれません。 StringFormatは最も簡単である:例えば

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

は、ビューを作成するために使用できるクエリ文字列を作成します。このコードをループに入れて、たくさんのビューを作成することができます。


SQL回答:その後、

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

SELECT C 
FROM USER_COUNT 
WHERE [email protected] 

あなたは本当に、ユーザーごとにビューを望むならば、あなたが行うことができ、次の

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

これは完全に有効な答えですが、基本的には、足で自分を撃つのが最善の方法を明確に指示しているので、upvoteするのは難しいです...そして、リロードする方法は、 。 – Twelfth

+0

@ Twelfth - 私たちはこれを知らないので、私はこのようなビューを自動的に作りたいと思う多くの理由を考えることができます。セキュリティはそれらの1つです。誰もが独自の視点を持っている場合、非常に安全な読み取り専用ソリューションです。それは悪い "におい"が、私たちはそれが悪いことを確かに知らない。 – Hogan

+0

セキュリティは私が見ることができる唯一の多分答えです、私はかなり良いオプションがあることを確信しています。ユーザーを作成し、ビューに同時にアクセス許可を与えるためのSQLコードをユーザーに提供したいかもしれません;)すぐに表示されるビューのアクセスの悪夢を自動化することもできます。 – Twelfth

関連する問題