#c#
#c#
Вопрос:
Я хотел бы сохранить массив Days
в одну ячейку, TimeIn_AM
в одну ячейку, TimeOut_AM
в одну ячейку, TimeIn_PM
в одну ячейку и TimeOut_PM
в одну ячейку
Вот мой класс и метод сохранения
public class EmployeeSchedule
{
public string EmployeeID { get; set; }
public string RecordID { get; set; }
public Schedule[] Schedule { get; set; }
}
public class Schedule
{
public string Days { get; set; }
public string TimeIn_AM { get; set; }
public string TimeOut_AM { get; set; }
public string TimeIn_PM { get; set; }
public string TimeOut_PM { get; set; }
}
for (int i = 0; i < employeeschedule.Schedule.Length; i )
{
SqlCommand mycommand = new SqlCommand("WorkSchedule_Save", MyConnection);
mycommand.CommandType = CommandType.StoredProcedure;
mycommand.Parameters.Add("@EmployeeID", SqlDbType.VarChar).Value = employeeschedule.EmployeeID;
mycommand.Parameters.Add("@RecordID", SqlDbType.Int).Value = employeeschedule.RecordID;
mycommand.Parameters.Add("@Days", SqlDbType.VarChar).Value = employeeschedule.Schedule[i].Days;
mycommand.Parameters.Add("TimeIn_AM", SqlDbType.VarChar).Value = employeeschedule.Schedule[i].TimeIn_AM;
mycommand.Parameters.Add("TimeOut_AM", SqlDbType.VarChar).Value = employeeschedule.Schedule[i].TimeOut_AM;
mycommand.Parameters.Add("TimeIn_PM", SqlDbType.VarChar).Value = employeeschedule.Schedule[i].TimeIn_PM;
mycommand.Parameters.Add("TimeOut_PM", SqlDbType.VarChar).Value = employeeschedule.Schedule[i].TimeOut_PM;
}
Я хочу 1 EmployeeID
и 1 RecordID
для всего массива в классе Schedule
, но когда я сохраняю его, он создает EmployeeID
и RecordID
для каждого данные в массиве.
- А также, если я перемещаю
EmployeeID
иRecordID
из цикла, он говоритstored procedure or function [WorkSchedule_Save] has too many arguments
*
Вот данные, которые я хочу сохранить
{
"EmployeeID": "1000415",
"RecordID": "1005",
"Schedule": [
{
"Days": "Sunday",
"TimeIn_AM": "",
"TimeOut_AM": "",
"TimeIn_PM": "",
"TimeOut_PM": ""
},
{
"Days": "Monday",
"TimeIn_AM": "9:00",
"TimeOut_AM": "12:00",
"TimeIn_PM": "1:00",
"TimeOut_PM": "5:00"
},
{
"Days": "Tuesday",
"TimeIn_AM": "9:00",
"TimeOut_AM": "12:00",
"TimeIn_PM": "1:00",
"TimeOut_PM": "5:00"
},
{
"Days": "Wednesday",
"TimeIn_AM": "9:00",
"TimeOut_AM": "12:00",
"TimeIn_PM": "1:00",
"TimeOut_PM": "5:00"
},
{
"Days": "Thursday",
"TimeIn_AM": "9:00",
"TimeOut_AM": "12:00",
"TimeIn_PM": "1:00",
"TimeOut_PM": "5:00"
},
{
"Days": "Friday",
"TimeIn_AM": "9:00",
"TimeOut_AM": "12:00",
"TimeIn_PM": "1:00",
"TimeOut_PM": "5:00"
},
{
"Days": "Saturday",
"TimeIn_AM": "",
"TimeOut_AM": "",
"TimeIn_PM": "",
"TimeOut_PM": ""
}
]
}
Комментарии:
1. Способ хранения данных называется FlatData, поэтому, если вы хотите изменить его, просто сохраните его в двух таблицах, которые связаны со столбцами идентификаторов.
2. @AliKianoor есть ли другой способ? например, сохранить массив в одну ячейку.
3. @sim что вы подразумеваете под ячейкой?
4. @Mohammed одна ячейка в базе данных
5. я хочу сохранить все значения массива в одной ячейке базы данных
Ответ №1:
Вы можете создать эти две таблицы
CREATE TABLE [dbo].[EmployeeSchedule]
(
[EmployeeID ] INT NOT NULL PRIMARY KEY IDENTITY,
[RecordID ] INT NOT NULL
)
CREATE TABLE [dbo].[Schedule]
(
[Days] NCHAR(50) NOT NULL,
[TimeIn_AM] NCHAR(50) NULL,
[TimeOut_AM] NCHAR(50) NULL,
[TimeIn_PM] NCHAR(50) NULL,
[TimeOut_PM] NCHAR(50) NULL,
[EmployeeId] INT NULL,
CONSTRAINT [FK_Schedule_ToEmployeeSchedule] FOREIGN KEY ([EmployeeId]) REFERENCES [EmployeeSchedule]([EmployeeID])
)
Я думаю, что лучше изменить классы на
public class EmployeeSchedule
{
public string EmployeeID { get; set; }
public string RecordID { get; set; }
public List<Schedule> Schedules { get; set; }
}
public class Schedule
{
public string Days { get; set; }
public string TimeIn_AM { get; set; }
public string TimeOut_AM { get; set; }
public string TimeIn_PM { get; set; }
public string TimeOut_PM { get; set; }
}
и затем, когда вы сохраняете, сохраните в EmployeeSchedule
, а затем сохраните в Schedule
Ответ №2:
Вы могли бы, но обычно вы не делаете это таким образом в SQL. (Кстати, это вопрос SQL и моделирования данных, а не C #).
У вас будет несколько таблиц в соответствии с
1. Employee
2. Record
3. ScheduleEntry
и сохраните все детали по частям в этих таблицах. Эта опция действительно единственная, которая позволяет вам эффективно работать с данными с помощью SQL.
Значительно худшим вариантом является наличие одной таблицы со столбцами для каждого ожидаемого бита
EmployeeNumber, RecordID, timeInMondayAM, timeOutMondayAM,timeInMondayPM, timeOutMondayPM, ... timeInAMSunday.. etc
.
Другой вариант, который я, конечно, не рекомендовал бы, — это иметь столбец расписания с текстом, JSON или XML для вашего массива значений и сохранять их там в соответствующем формате.