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