From 94c043045cbb5b445837eae9794d59bad035ddfe Mon Sep 17 00:00:00 2001 From: "allen.yan" Date: Tue, 1 Apr 2025 09:44:38 +0800 Subject: [PATCH] =?UTF-8?q?=20=E6=94=B9=E8=AE=80DB=20=E5=8F=96=E6=AD=8C?= =?UTF-8?q?=E5=96=AE=2020250401?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- App.config | 13 +- Controller/Index.cs | 341 +++++++++---------------- Controller/{MainWindow.cs => login.cs} | 4 +- Karaoke Kingpin.csproj | 64 ++--- Models/MyDB.cs | 59 +++++ Models/SongData.cs | 8 +- Views/App.xaml | 2 +- Views/{MainWindow.xaml => login.xaml} | 2 +- packages.config | 22 +- 9 files changed, 231 insertions(+), 284 deletions(-) rename Controller/{MainWindow.cs => login.cs} (97%) create mode 100644 Models/MyDB.cs rename Views/{MainWindow.xaml => login.xaml} (97%) diff --git a/App.config b/App.config index f60dcdf..f16550d 100644 --- a/App.config +++ b/App.config @@ -1,7 +1,7 @@  - +
@@ -15,11 +15,11 @@ - + - + @@ -33,10 +33,5 @@ - - - - - - + \ No newline at end of file diff --git a/Controller/Index.cs b/Controller/Index.cs index 034390d..b043a65 100644 --- a/Controller/Index.cs +++ b/Controller/Index.cs @@ -8,7 +8,7 @@ using System.Linq; using System.Text; using System.Threading.Tasks; using System.Data; -using System.Data.SQLite; // 確保添加了這個命名空間 +//using System.Data.SQLite; // 確保添加了這個命名空間 //using System.Data.SqlClient; // 对于SQL Server using System.Windows; using System.Windows.Controls; @@ -32,6 +32,7 @@ using ExcelDataReader; using System.Text.RegularExpressions; using System.Windows.Threading; using System.Windows.Forms; +using MySqlConnector; using Karaoke_Kingpin.Models; using Karaoke_Kingpin.Converters; namespace Karaoke_Kingpin.Controller @@ -661,81 +662,56 @@ namespace Karaoke_Kingpin.Controller [DllImport("kernel32.dll", SetLastError = true)] static extern bool FreeConsole(); - private void LoadSongsFromDatabase() + private void LoadSongsFromDatabase() { - string connectionString = @"Data Source=KSongDatabase.db;"; // SQLite连接字符串 - string query = "SELECT * FROM SongLibrary"; - - using (SQLiteConnection connection = new SQLiteConnection(connectionString)) + using (MyDB db = new MyDB()) // MyDB 改為 SongDB { - SQLiteCommand command = new SQLiteCommand(query, connection); - try + string sql = "SELECT * FROM SongLibrary;"; + DataTable result = db.Select(sql, null); + + _songs = new ObservableCollection(); + + foreach (DataRow row in result.Rows) { - connection.Open(); - SQLiteDataReader reader = command.ExecuteReader(); - - _songs = new ObservableCollection(); - while (reader.Read()) - { - //int? dbAdjust = null; // 使用可空的整数类型 - - //// 在尝试转换之前,检查字段是否为空 - //if (!reader.IsDBNull(reader.GetOrdinal("DB加減")) && !string.IsNullOrWhiteSpace(reader["DB加減"].ToString())) - //{ - // dbAdjust = Convert.ToInt32(reader["DB加減"]); - //} - - int songNameLength = 0; - - if (!int.TryParse(reader["歌名字數"].ToString(), out songNameLength)) - { - System.Diagnostics.Debug.WriteLine($"歌名字數 conversion failed for value {reader["歌名字數"].ToString()}"); - } - - var song = new SongData( - reader["歌曲編號"].ToString(), - reader["歌曲名稱"].ToString(), - reader["歌星 A"].ToString(), - reader["歌星 B"].ToString(), - reader["路徑 1"].ToString(), - reader["路徑 2"].ToString(), - reader["歌曲檔名"].ToString(), - reader.IsDBNull(reader.GetOrdinal("新增日期")) ? DateTime.Now.ToString("yyyy/MM/dd") : Convert.ToDateTime(reader["新增日期"]).ToString("yyyy/MM/dd"), - reader["分類"].ToString(), - reader["歌曲注音"].ToString(), - reader["歌曲拼音"].ToString(), - reader["語別"].ToString(), - reader.IsDBNull(reader.GetOrdinal("點播次數")) ? 0 : Convert.ToInt32(reader["點播次數"]), - reader["版權01"].ToString(), - reader["版權02"].ToString(), - reader["版權03"].ToString(), - reader["版權04"].ToString(), - reader["版權05"].ToString(), - reader["版權06"].ToString(), - reader.IsDBNull(reader.GetOrdinal("狀態")) ? 0 : Convert.ToInt32(reader["狀態"]), - reader.IsDBNull(reader.GetOrdinal("歌名字數")) ? 0 : Convert.ToInt32(reader["歌名字數"]), - reader.IsDBNull(reader.GetOrdinal("人聲")) ? 0 : Convert.ToInt32(reader["人聲"]), - reader.IsDBNull(reader.GetOrdinal("狀態2")) ? 0 : Convert.ToInt32(reader["狀態2"]), - reader["情境"].ToString(), - reader["歌星A注音"].ToString(), - reader["歌星B注音"].ToString(), - reader["歌星A分類"].ToString(), - reader["歌星B分類"].ToString(), - reader["歌星A簡體"].ToString(), - reader["歌星B簡體"].ToString(), - reader["歌名簡體"].ToString(), - reader["歌星A拼音"].ToString(), - reader["歌星B拼音"].ToString() - ); - _songs.Add(song); - } - SongsDataGrid.ItemsSource = _songs; // 确保这里没有错误,你的 XAML 定义了 SongsDataGrid 控件 - reader.Close(); - } - catch (Exception ex) - { - System.Windows.MessageBox.Show("數據庫操作失敗: " + ex.Message); + var song = new SongData( + row["歌曲編號"].ToString(), + row["歌曲名稱"].ToString(), + row["歌星 A"].ToString(), + row["歌星 B"].ToString(), + row["路徑 1"].ToString(), + row["路徑 2"].ToString(), + row["歌曲檔名"].ToString(), + row.IsNull("新增日期") ? DateTime.Now.ToString("yyyy/MM/dd") : Convert.ToDateTime(row["新增日期"]).ToString("yyyy/MM/dd"), + row["分類"].ToString(), + row["歌曲注音"].ToString(), + row["歌曲拼音"].ToString(), + row["語別"].ToString(), + row.IsNull("點播次數") ? 0 : Convert.ToInt32(row["點播次數"]), + row["版權01"].ToString(), + row["版權02"].ToString(), + row["版權03"].ToString(), + row["版權04"].ToString(), + row["版權05"].ToString(), + row["版權06"].ToString(), + row.IsNull("狀態") ? 0 : Convert.ToInt32(row["狀態"]), + row.IsNull("歌名字數") ? 0 : Convert.ToInt32(row["歌名字數"]), + row.IsNull("人聲") ? 0 : Convert.ToInt32(row["人聲"]), + row.IsNull("狀態2") ? 0 : Convert.ToInt32(row["狀態2"]), + row["情境"].ToString(), + row["歌星A注音"].ToString(), + row["歌星B注音"].ToString(), + row["歌星A分類"].ToString(), + row["歌星B分類"].ToString(), + row["歌星A簡體"].ToString(), + row["歌星B簡體"].ToString(), + row["歌名簡體"].ToString(), + row["歌星A拼音"].ToString(), + row["歌星B拼音"].ToString() + ); + _songs.Add(song); } + + SongsDataGrid.ItemsSource = _songs; // 確保 XAML 定義了 SongsDataGrid 控件 } } @@ -936,178 +912,107 @@ namespace Karaoke_Kingpin.Controller } } - private void DeleteSongFromDatabase(string songNumber) - { - string connectionString = @"Data Source=KSongDatabase.db;"; - - using (SQLiteConnection connection = new SQLiteConnection(connectionString)) + private void DeleteSongFromDatabase(string songNumber){ + using (MyDB db = new MyDB()) { - string query = "DELETE FROM SongLibrary WHERE 歌曲編號 = @SongNumber"; + string deleteQuery = "DELETE FROM SongLibrary WHERE 歌曲編號 = @SongNumber"; - using (SQLiteCommand command = new SQLiteCommand(query, connection)) - { - command.Parameters.AddWithValue("@SongNumber", songNumber); - connection.Open(); + MySqlParameter[] parameters = {new MySqlParameter("@SongNumber", songNumber)}; - int rowsAffected = command.ExecuteNonQuery(); - if (rowsAffected > 0) - { - Console.WriteLine($"Song with SongNumber: {songNumber} successfully deleted."); - } - else - { - Console.WriteLine($"Failed to delete song with SongNumber: {songNumber}."); - } + int rowsAffected = db.ExecuteNonQuery(deleteQuery, parameters); + + if (rowsAffected > 0){ + Console.WriteLine($"歌曲編號 {songNumber} 刪除成功!"); + }else{ + Console.WriteLine($"刪除歌曲編號 {songNumber} 失敗,可能該歌曲不存在。"); } } } - - private void SaveSongToDatabase(SongData song) - { - string connectionString = @"Data Source=KSongDatabase.db;"; - string query = "INSERT INTO SongLibrary (歌曲編號, 歌曲名稱, [歌星 A], [歌星 B], [路徑 1], [路徑 2], 歌曲檔名, 新增日期, 分類, 歌曲注音, 歌曲拼音, 語別, 點播次數, 版權01, 版權02, 版權03, 版權04, 版權05, 版權06, 狀態, 歌名字數, 人聲, 狀態2, 情境, 歌星A注音, 歌星B注音, 歌星A分類, 歌星B分類, 歌星A簡體, 歌星B簡體, 歌名簡體) " + - "VALUES (@SongNumber, @Song, @ArtistA, @ArtistB, @SongFilePathHost1, @SongFilePathHost2, @SongFileName, @AddedTime, @Category, @PhoneticNotation, @PinyinNotation, @LanguageType, @Plays, @Copyright01, @Copyright02, @Copyright03, @Copyright04, @Copyright05, @Copyright06, @Status, @SongNameLength, @Vocal, @Status2, @Situation, @ArtistAPhonetic, @ArtistBPhonetic, @ArtistACategory, @ArtistBCategory, @ArtistASimplified, @ArtistBSimplified, @SongSimplified)"; - - using (SQLiteConnection connection = new SQLiteConnection(connectionString)) - { - SQLiteCommand command = new SQLiteCommand(query, connection); - command.Parameters.AddWithValue("@SongNumber", song.SongNumber); - command.Parameters.AddWithValue("@Song", song.Song); - command.Parameters.AddWithValue("@ArtistA", song.ArtistA); - command.Parameters.AddWithValue("@ArtistB", song.ArtistB); - command.Parameters.AddWithValue("@SongFilePathHost1", song.SongFilePathHost1); - command.Parameters.AddWithValue("@SongFilePathHost2", song.SongFilePathHost2); - command.Parameters.AddWithValue("@SongFileName", song.SongFileName); - // Convert the date format from "yyyy/MM/dd" to "yyyy-MM-dd" - string addedTimeFormatted = song.AddedTime; - DateTime parsedDate; - if (DateTime.TryParseExact(addedTimeFormatted, "yyyy/MM/dd", CultureInfo.InvariantCulture, DateTimeStyles.None, out parsedDate)) - { - addedTimeFormatted = parsedDate.ToString("yyyy-MM-dd"); - } - command.Parameters.AddWithValue("@AddedTime", addedTimeFormatted); - command.Parameters.AddWithValue("@Category", song.Category); - command.Parameters.AddWithValue("@PhoneticNotation", song.PhoneticNotation); - command.Parameters.AddWithValue("@PinyinNotation", song.PinyinNotation); - command.Parameters.AddWithValue("@LanguageType", song.LanguageType); - command.Parameters.AddWithValue("@Plays", song.Plays); - command.Parameters.AddWithValue("@Copyright01", song.Copyright01); - command.Parameters.AddWithValue("@Copyright02", song.Copyright02); - command.Parameters.AddWithValue("@Copyright03", song.Copyright03); - command.Parameters.AddWithValue("@Copyright04", song.Copyright04); - command.Parameters.AddWithValue("@Copyright05", song.Copyright05); - command.Parameters.AddWithValue("@Copyright06", song.Copyright06); - command.Parameters.AddWithValue("@Status", song.Status); - command.Parameters.AddWithValue("@SongNameLength", song.SongNameLength); - command.Parameters.AddWithValue("@Vocal", song.Vocal); - command.Parameters.AddWithValue("@Status2", song.Status2); - command.Parameters.AddWithValue("@Situation", song.Situation); - command.Parameters.AddWithValue("@ArtistAPhonetic", song.ArtistAPhonetic); - command.Parameters.AddWithValue("@ArtistBPhonetic", song.ArtistBPhonetic); - command.Parameters.AddWithValue("@ArtistACategory", song.ArtistACategory); - command.Parameters.AddWithValue("@ArtistBCategory", song.ArtistBCategory); - command.Parameters.AddWithValue("@ArtistASimplified", song.ArtistASimplified); - command.Parameters.AddWithValue("@ArtistBSimplified", song.ArtistBSimplified); - command.Parameters.AddWithValue("@SongSimplified", song.SongSimplified); - - try - { - connection.Open(); - command.ExecuteNonQuery(); - System.Windows.MessageBox.Show("Song saved successfully to the database."); - } - catch (Exception ex) - { - System.Windows.MessageBox.Show("Failed to save song to the database: " + ex.Message); - } - } - - // Add the song to the ObservableCollection if it's not already in it - var existingSong = _songs.FirstOrDefault(s => s.SongNumber == song.SongNumber); - if (existingSong == null) - { - _songs.Add(song); - } - else - { - // Update the existing song in the ObservableCollection - int index = _songs.IndexOf(existingSong); - _songs[index] = song; - } - } - private void _SaveSongToDatabase(SongData song) { - string connectionString = @"Data Source=KSongDatabase.db;"; - string query = "INSERT INTO SongLibrary (歌曲編號, 歌曲名稱, [歌星 A], [歌星 B], [路徑 1], [路徑 2], 歌曲檔名, 新增日期, 分類, 歌曲注音, 歌曲拼音, 語別, 點播次數, 版權01, 版權02, 版權03, 版權04, 版權05, 版權06, 狀態, 歌名字數, 人聲, 狀態2, 情境, 歌星A注音, 歌星B注音, 歌星A分類, 歌星B分類, 歌星A簡體, 歌星B簡體, 歌名簡體) " + - "VALUES (@SongNumber, @Song, @ArtistA, @ArtistB, @SongFilePathHost1, @SongFilePathHost2, @SongFileName, @AddedTime, @Category, @PhoneticNotation, @PinyinNotation, @LanguageType, @Plays, @Copyright01, @Copyright02, @Copyright03, @Copyright04, @Copyright05, @Copyright06, @Status, @SongNameLength, @Vocal, @Status2, @Situation, @ArtistAPhonetic, @ArtistBPhonetic, @ArtistACategory, @ArtistBCategory, @ArtistASimplified, @ArtistBSimplified, @SongSimplified)"; - - using (SQLiteConnection connection = new SQLiteConnection(connectionString)) + using (MyDB db = new MyDB()) { - SQLiteCommand command = new SQLiteCommand(query, connection); - command.Parameters.AddWithValue("@SongNumber", song.SongNumber); - command.Parameters.AddWithValue("@Song", song.Song); - command.Parameters.AddWithValue("@ArtistA", song.ArtistA); - command.Parameters.AddWithValue("@ArtistB", song.ArtistB); - command.Parameters.AddWithValue("@SongFilePathHost1", song.SongFilePathHost1); - command.Parameters.AddWithValue("@SongFilePathHost2", song.SongFilePathHost2); - command.Parameters.AddWithValue("@SongFileName", song.SongFileName); - // Convert the date format from "yyyy/MM/dd" to "yyyy-MM-dd" + string query = @"INSERT INTO SongLibrary + (`歌曲編號`, `歌曲名稱`, `歌星 A`, `歌星 B`, `路徑 1`, `路徑 2`, `歌曲檔名`, `新增日期`, `分類`, `歌曲注音`, `歌曲拼音`, `語別`, `點播次數`, + `版權01`, `版權02`, `版權03`, `版權04`, `版權05`, `版權06`, `狀態`, `歌名字數`, `人聲`, `狀態2`, `情境`, `歌星A注音`, `歌星B注音`, + `歌星A分類`, `歌星B分類`, `歌星A簡體`, `歌星B簡體`, `歌名簡體`) + VALUES + (@SongNumber, @Song, @ArtistA, @ArtistB, @SongFilePathHost1, @SongFilePathHost2, @SongFileName, @AddedTime, @Category, @PhoneticNotation, + @PinyinNotation, @LanguageType, @Plays, @Copyright01, @Copyright02, @Copyright03, @Copyright04, @Copyright05, @Copyright06, + @Status, @SongNameLength, @Vocal, @Status2, @Situation, @ArtistAPhonetic, @ArtistBPhonetic, @ArtistACategory, @ArtistBCategory, + @ArtistASimplified, @ArtistBSimplified, @SongSimplified) + ON DUPLICATE KEY UPDATE + `歌曲名稱` = VALUES(`歌曲名稱`), `歌星 A` = VALUES(`歌星 A`), `歌星 B` = VALUES(`歌星 B`), + `路徑 1` = VALUES(`路徑 1`), `路徑 2` = VALUES(`路徑 2`), `歌曲檔名` = VALUES(`歌曲檔名`), + `分類` = VALUES(`分類`), `歌曲注音` = VALUES(`歌曲注音`), `歌曲拼音` = VALUES(`歌曲拼音`), + `語別` = VALUES(`語別`), `點播次數` = VALUES(`點播次數`), `版權01` = VALUES(`版權01`), + `版權02` = VALUES(`版權02`), `版權03` = VALUES(`版權03`), `版權04` = VALUES(`版權04`), + `版權05` = VALUES(`版權05`), `版權06` = VALUES(`版權06`), `狀態` = VALUES(`狀態`), + `歌名字數` = VALUES(`歌名字數`), `人聲` = VALUES(`人聲`), `狀態2` = VALUES(`狀態2`), + `情境` = VALUES(`情境`), `歌星A注音` = VALUES(`歌星A注音`), `歌星B注音` = VALUES(`歌星B注音`), + `歌星A分類` = VALUES(`歌星A分類`), `歌星B分類` = VALUES(`歌星B分類`), `歌星A簡體` = VALUES(`歌星A簡體`), + `歌星B簡體` = VALUES(`歌星B簡體`), `歌名簡體` = VALUES(`歌名簡體`);"; + + // 轉換日期格式(yyyy/MM/dd → yyyy-MM-dd) string addedTimeFormatted = song.AddedTime; - DateTime parsedDate; - if (DateTime.TryParseExact(addedTimeFormatted, "yyyy/MM/dd", CultureInfo.InvariantCulture, DateTimeStyles.None, out parsedDate)) + if (DateTime.TryParseExact(addedTimeFormatted, "yyyy/MM/dd", CultureInfo.InvariantCulture, DateTimeStyles.None, out DateTime parsedDate)) { addedTimeFormatted = parsedDate.ToString("yyyy-MM-dd"); } - command.Parameters.AddWithValue("@AddedTime", addedTimeFormatted); - command.Parameters.AddWithValue("@Category", song.Category); - command.Parameters.AddWithValue("@PhoneticNotation", song.PhoneticNotation); - command.Parameters.AddWithValue("@PinyinNotation", song.PinyinNotation); - command.Parameters.AddWithValue("@LanguageType", song.LanguageType); - command.Parameters.AddWithValue("@Plays", song.Plays); - command.Parameters.AddWithValue("@Copyright01", song.Copyright01); - command.Parameters.AddWithValue("@Copyright02", song.Copyright02); - command.Parameters.AddWithValue("@Copyright03", song.Copyright03); - command.Parameters.AddWithValue("@Copyright04", song.Copyright04); - command.Parameters.AddWithValue("@Copyright05", song.Copyright05); - command.Parameters.AddWithValue("@Copyright06", song.Copyright06); - command.Parameters.AddWithValue("@Status", song.Status); - command.Parameters.AddWithValue("@SongNameLength", song.SongNameLength); - command.Parameters.AddWithValue("@Vocal", song.Vocal); - command.Parameters.AddWithValue("@Status2", song.Status2); - command.Parameters.AddWithValue("@Situation", song.Situation); - command.Parameters.AddWithValue("@ArtistAPhonetic", song.ArtistAPhonetic); - command.Parameters.AddWithValue("@ArtistBPhonetic", song.ArtistBPhonetic); - command.Parameters.AddWithValue("@ArtistACategory", song.ArtistACategory); - command.Parameters.AddWithValue("@ArtistBCategory", song.ArtistBCategory); - command.Parameters.AddWithValue("@ArtistASimplified", song.ArtistASimplified); - command.Parameters.AddWithValue("@ArtistBSimplified", song.ArtistBSimplified); - command.Parameters.AddWithValue("@SongSimplified", song.SongSimplified); - try - { - connection.Open(); - command.ExecuteNonQuery(); - //System.Windows.MessageBox.Show("Song saved successfully to the database."); - } - catch (Exception ex) - { - System.Windows.MessageBox.Show("Failed to save song to the database: " + ex.Message); - } + // 設定參數 + MySqlParameter[] parameters = { + new MySqlParameter("@SongNumber", song.SongNumber), + new MySqlParameter("@Song", song.Song), + new MySqlParameter("@ArtistA", song.ArtistA), + new MySqlParameter("@ArtistB", song.ArtistB), + new MySqlParameter("@SongFilePathHost1", song.SongFilePathHost1), + new MySqlParameter("@SongFilePathHost2", song.SongFilePathHost2), + new MySqlParameter("@SongFileName", song.SongFileName), + new MySqlParameter("@AddedTime", addedTimeFormatted), + new MySqlParameter("@Category", song.Category), + new MySqlParameter("@PhoneticNotation", song.PhoneticNotation), + new MySqlParameter("@PinyinNotation", song.PinyinNotation), + new MySqlParameter("@LanguageType", song.LanguageType), + new MySqlParameter("@Plays", song.Plays), + new MySqlParameter("@Copyright01", song.Copyright01), + new MySqlParameter("@Copyright02", song.Copyright02), + new MySqlParameter("@Copyright03", song.Copyright03), + new MySqlParameter("@Copyright04", song.Copyright04), + new MySqlParameter("@Copyright05", song.Copyright05), + new MySqlParameter("@Copyright06", song.Copyright06), + new MySqlParameter("@Status", song.Status), + new MySqlParameter("@SongNameLength", song.SongNameLength), + new MySqlParameter("@Vocal", song.Vocal), + new MySqlParameter("@Status2", song.Status2), + new MySqlParameter("@Situation", song.Situation), + new MySqlParameter("@ArtistAPhonetic", song.ArtistAPhonetic), + new MySqlParameter("@ArtistBPhonetic", song.ArtistBPhonetic), + new MySqlParameter("@ArtistACategory", song.ArtistACategory), + new MySqlParameter("@ArtistBCategory", song.ArtistBCategory), + new MySqlParameter("@ArtistASimplified", song.ArtistASimplified), + new MySqlParameter("@ArtistBSimplified", song.ArtistBSimplified), + new MySqlParameter("@SongSimplified", song.SongSimplified), + }; + + int affectedRows = db.ExecuteNonQuery(query, parameters); + Console.WriteLine($"影響的行數: {affectedRows}"); } - // Add the song to the ObservableCollection if it's not already in it + // 更新 ObservableCollection var existingSong = _songs.FirstOrDefault(s => s.SongNumber == song.SongNumber); if (existingSong == null) { _songs.Add(song); + Console.WriteLine($"加入一筆: {song.SongNumber}"); } else { - // Update the existing song in the ObservableCollection int index = _songs.IndexOf(existingSong); _songs[index] = song; + Console.WriteLine($"修改一筆: {song.SongNumber}"); } + } private void LoveSongButton_Click(object sender, RoutedEventArgs e) diff --git a/Controller/MainWindow.cs b/Controller/login.cs similarity index 97% rename from Controller/MainWindow.cs rename to Controller/login.cs index 7d31694..fbf7eb1 100644 --- a/Controller/MainWindow.cs +++ b/Controller/login.cs @@ -21,9 +21,9 @@ namespace Karaoke_Kingpin.Controller /// /// MainWindow.xaml 的互動邏輯 /// - public partial class MainWindow : Window + public partial class login : Window { - public MainWindow() + public login() { InitializeComponent(); } diff --git a/Karaoke Kingpin.csproj b/Karaoke Kingpin.csproj index 0e47025..3050c07 100644 --- a/Karaoke Kingpin.csproj +++ b/Karaoke Kingpin.csproj @@ -1,6 +1,5 @@  - Debug @@ -51,14 +50,8 @@ packages\Microsoft.International.Converters.PinYinConverter.1.0.0\lib\ChnCharInfo.dll - - packages\EntityFramework.6.5.1\lib\net45\EntityFramework.dll - - - packages\EntityFramework.6.5.1\lib\net45\EntityFramework.SqlServer.dll - - - packages\EPPlus.7.7.0\lib\net462\EPPlus.dll + + packages\EPPlus.8.0.1\lib\net462\EPPlus.dll packages\EPPlus.Interfaces.8.0.0\lib\net462\EPPlus.Interfaces.dll @@ -78,8 +71,8 @@ packages\Microsoft.Bcl.AsyncInterfaces.9.0.3\lib\net462\Microsoft.Bcl.AsyncInterfaces.dll - - packages\Microsoft.Data.Sqlite.Core.9.0.3\lib\netstandard2.0\Microsoft.Data.Sqlite.dll + + packages\Microsoft.Bcl.Cryptography.9.0.3\lib\net462\Microsoft.Bcl.Cryptography.dll packages\Microsoft.Extensions.DependencyInjection.Abstractions.9.0.3\lib\net462\Microsoft.Extensions.DependencyInjection.Abstractions.dll @@ -105,31 +98,16 @@ packages\pinyin4net.1.0.0\lib\net40\Pinyin4net.dll - - packages\SQLitePCLRaw.bundle_e_sqlite3.2.1.11\lib\net461\SQLitePCLRaw.batteries_v2.dll - - - packages\SQLitePCLRaw.core.2.1.11\lib\netstandard2.0\SQLitePCLRaw.core.dll - - - packages\SQLitePCLRaw.provider.dynamic_cdecl.2.1.11\lib\netstandard2.0\SQLitePCLRaw.provider.dynamic_cdecl.dll - + + packages\System.Buffers.4.6.1\lib\net462\System.Buffers.dll + packages\System.ComponentModel.Annotations.5.0.0\lib\net461\System.ComponentModel.Annotations.dll - - packages\Stub.System.Data.SQLite.Core.NetFramework.1.0.119.0\lib\net46\System.Data.SQLite.dll - - - packages\System.Data.SQLite.EF6.1.0.119.0\lib\net46\System.Data.SQLite.EF6.dll - - - packages\System.Data.SQLite.Linq.1.0.119.0\lib\net46\System.Data.SQLite.Linq.dll - packages\System.Diagnostics.DiagnosticSource.9.0.3\lib\net462\System.Diagnostics.DiagnosticSource.dll @@ -137,9 +115,25 @@ packages\System.Drawing.Common.9.0.3\lib\net462\System.Drawing.Common.dll + + packages\System.Formats.Asn1.9.0.3\lib\net462\System.Formats.Asn1.dll + + + + packages\System.Memory.4.6.2\lib\net462\System.Memory.dll + + + packages\System.Numerics.Vectors.4.6.1\lib\net462\System.Numerics.Vectors.dll + + + packages\System.Runtime.CompilerServices.Unsafe.6.1.1\lib\net462\System.Runtime.CompilerServices.Unsafe.dll + + + packages\System.Security.Cryptography.Xml.9.0.3\lib\net462\System.Security.Cryptography.Xml.dll + packages\System.Text.Encoding.CodePages.9.0.3\lib\net462\System.Text.Encoding.CodePages.dll @@ -169,11 +163,12 @@ + Designer MSBuild:Compile - + MSBuild:Compile Designer @@ -183,7 +178,7 @@ - + Code @@ -229,10 +224,7 @@ 此專案參考這部電腦上所缺少的 NuGet 套件。請啟用 NuGet 套件還原,以下載該套件。如需詳細資訊,請參閱 http://go.microsoft.com/fwlink/?LinkID=322105。缺少的檔案是 {0}。 - - - + - - + \ No newline at end of file diff --git a/Models/MyDB.cs b/Models/MyDB.cs new file mode 100644 index 0000000..660e868 --- /dev/null +++ b/Models/MyDB.cs @@ -0,0 +1,59 @@ +using System; +using System.Data; +using MySqlConnector; + +namespace Karaoke_Kingpin.Models +{ + public class MyDB : IDisposable + { + private readonly string connectionString = "Server=192.168.22.170;Port=3306;Database=Karaoke-Kingpin;User=Karaoke-Kingpin;Password=ESM7yTPMnavFmbBH;"; + private MySqlConnection conn; + + public MyDB() + { + conn = new MySqlConnection(connectionString); + conn.Open(); + Console.WriteLine("MyDB 連線成功!"); + } + + public void Dispose() + { + if (conn != null) + { + conn.Close(); + Console.WriteLine("MyDB 連線已關閉!"); + } + } + + // SELECT 方法 + public DataTable Select(string query, MySqlParameter[] parameters) + { + using (var cmd = new MySqlCommand(query, conn)) + { + if (parameters != null) + { + cmd.Parameters.AddRange(parameters); + } + using (var adapter = new MySqlDataAdapter(cmd)) + { + DataTable result = new DataTable(); + adapter.Fill(result); + return result; + } + } + } + + // INSERT / UPDATE / DELETE 方法 + public int ExecuteNonQuery(string query, MySqlParameter[] parameters) + { + using (var cmd = new MySqlCommand(query, conn)) + { + if (parameters != null) + { + cmd.Parameters.AddRange(parameters); + } + return cmd.ExecuteNonQuery(); + } + } + } +} diff --git a/Models/SongData.cs b/Models/SongData.cs index fabaeb5..0ad0a9a 100644 --- a/Models/SongData.cs +++ b/Models/SongData.cs @@ -1,8 +1,8 @@ using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; +//using System.Collections.Generic; +//using System.Linq; +//using System.Text; +//using System.Threading.Tasks; namespace Karaoke_Kingpin.Models { diff --git a/Views/App.xaml b/Views/App.xaml index 7038615..1a5e473 100644 --- a/Views/App.xaml +++ b/Views/App.xaml @@ -3,7 +3,7 @@ xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:local="clr-namespace:Karaoke_Kingpin.Controller" xmlns:converters="clr-namespace:Karaoke_Kingpin.Converters" - StartupUri="Views\MainWindow.xaml"> + StartupUri="Views\login.xaml"> diff --git a/Views/MainWindow.xaml b/Views/login.xaml similarity index 97% rename from Views/MainWindow.xaml rename to Views/login.xaml index e691736..1bda406 100644 --- a/Views/MainWindow.xaml +++ b/Views/login.xaml @@ -1,4 +1,4 @@ - - - + - - + @@ -20,18 +18,16 @@ - - - - - + - - - - + + + + + + \ No newline at end of file