WPF(C#)を使用して音楽プレーヤーアプリケーションを作成しています。その機能の一部として、音楽ライブラリにデータを入力します。ここには、タイトルとパスをmp3ファイルに保存します。ユーザーは自分の音楽ライブラリのルートフォルダを選択し、コンテンツが「曲」テーブルに入力されます。これは私が書いたコードです:
private void Populate_Click(object sender, RoutedEventArgs e)
{
// Folder browser
FolderBrowserDialog dlg = new FolderBrowserDialog();
dlg.ShowDialog();
string DirectoryPath = System.IO.Path.GetDirectoryName(dlg.SelectedPath);
// Get the data directory
string[] A = Directory.GetFiles(DirectoryPath, "*.mp3", SearchOption.AllDirectories);
string[] fName = new string[A.Count()];
// Initialize connection
string connstr = "Data Source=.\\SQLEXPRESS;AttachDbFilename=|DataDirectory|\\Database.mdf;Integrated Security=True;User Instance=True";
SqlConnection conn = new SqlConnection(connstr);
conn.Open();
// Create the SqlCommand
SqlCommand cmd = new SqlCommand();
cmd.Connection = conn;
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = "InsertSongs";
// Create the parameters and execute the command
for (int i = 0; i < A.Count(); i++)
{
fName[i] = System.IO.Path.GetFileName(A[i]);
cmd.Parameters.AddWithValue("@Title", fName[i]);
cmd.Parameters.AddWithValue("@Path", A[i]);
try
{
cmd.ExecuteNonQuery();
}
catch (Exception ex)
{
System.Windows.MessageBox.Show("Error: " + ex.Message);
}
finally
{
listBox1.Items.Add(A[i]);
listBox2.Items.Add(fName[i]);
cmd.Parameters.Clear();
}
}
// Close the connection
cmd.Dispose();
conn.Close();
conn.Dispose();
}
ストアドプロシージャのコードは単純です-
ALTER PROCEDURE dbo.InsertSongs
(
@Title nvarchar(50),
@Path nvarchar(50)
)
AS
INSERT INTO Songs(Title, Path) VALUES(@Title, @Path)
これで、プログラムを実行してもエラーメッセージは表示されません(ファイル名とディレクトリ名のサイズは50未満です)。ただし、実行の最後には、Songsテーブルに値は挿入されません。
曲の表は次のように説明されています。
ID int タイトルnvarchar(50) パスnvarchar(50)
どこが間違っているのかわかりません。また、SqlParameterを使用して、パラメーターのタイプをサイズ50のNVARCHARとして定義しようとしましたが、役に立ちませんでした。ここで私を助けてくれませんか。よろしくお願いします。